sql >> Databasteknik >  >> RDS >> MariaDB

Hur du skyddar din MySQL- eller MariaDB-databas från SQL-injektion:Del ett

Säkerhet är en av de viktigaste delarna i den korrekt designade databasmiljön. Det finns många attackvektorer som används med SQL-injektion som förmodligen är den mest populära. Du kan designa lager av försvar i applikationskoden men vad kan du göra på databaslagret? Idag skulle vi vilja visa dig hur enkelt du kan implementera SQL-brandvägg ovanpå MySQL med ProxySQL. I den andra delen av den här bloggen kommer vi att förklara hur du kan skapa en vitlista över frågor som får komma åt databasen.

Först vill vi distribuera ProxySQL. Det enklaste sättet att göra det är att använda ClusterControl. Med ett par klick kan du distribuera den till ditt kluster.

Definiera var den ska distribueras, du kan antingen välja befintlig värd i klustret eller bara skriv ner valfri IP eller värdnamn. Ställ in autentiseringsuppgifter för administratörer och övervakningsanvändare.

Då kan du skapa en ny användare i databasen som ska användas med ProxySQL eller så kan du importera en av de befintliga. Du måste också definiera de databasnoder du vill inkludera i ProxySQL. Svara om du använder implicita transaktioner eller inte och du är redo att distribuera ProxySQL. Inom ett par minuter är en ProxySQL med konfiguration förberedd baserat på din input redo att användas.

Med tanke på vårt problem är säkerhet vill vi kunna berätta för ProxySQL hur man hanterar olämpliga frågor. Låt oss ta en titt på frågereglerna, kärnmekanismen som styr hur ProxySQL hanterar trafiken som passerar genom den. Listan med frågeregler kan se ut så här:

De tillämpas från lägsta ID och framåt.

Låt oss försöka skapa en frågeregel som endast tillåter SELECT-frågor för en viss användare:

Vi lägger till en frågeregel i början av regellistan. Vi kommer att matcha allt som inte är SELECTs (observera att Negate Match Pattern är aktiverat). Frågeregeln kommer endast att användas när användarnamnet är "devuser". Om alla villkor är uppfyllda kommer användaren att se felet som i fältet "Felmeddelande".

[email protected]:~# mysql -u devuser -h 10.0.0.144 -P6033 -ppass

mysql: [Warning] Using a password on the command line interface can be insecure.

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 3024

Server version: 5.5.30 (ProxySQL)



Copyright (c) 2009-2019 Percona LLC and/or its affiliates

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.



Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.



Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.



mysql> create schema myschema;

ERROR 1148 (42000): The query is not allowed

mysql> SELECT 1;

+---+

| 1 |

+---+

| 1 |

+---+

1 row in set (0.01 sec)



mysql> SELECT * FROM sbtest.sbtest1 LIMIT 1\G

*************************** 1. row ***************************

 id: 1

  k: 503019

  c: 18034632456-32298647298-82351096178-60420120042-90070228681-93395382793-96740777141-18710455882-88896678134-41810932745

pad: 43683718329-48150560094-43449649167-51455516141-06448225399

1 row in set (0.00 sec)

Ett annat exempel, den här gången kommer vi att försöka förhindra olyckor relaterade till Bobby Tables-situationen.

Med den här frågeregeln på plats kommer inte din 'studenttabell' bli släppt av Bobby:

mysql> use school;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A



Database changed

mysql> INSERT INTO students VALUES (1, 'Robert');DROP TABLE students;--

Query OK, 1 row affected (0.01 sec)



ERROR 1148 (42000): Only superuser can execute DROP TABLE;

Som du kan se kunde Bobby inte ta bort vår "studenttabell". Han var bara snyggt inskjuten i bordet.


  1. Android Studio kontrollerar/markerar inte Kotlin Room DAO-frågor när strängen upptar mer än 1 rad

  2. Kan %NOTFOUND returnera null efter en hämtning?

  3. Beräkna decil från senaste i MySQL

  4. Mätning av frågeprestanda:Exekveringsplan för frågekostnad kontra tid