sql >> Database teknologi >  >> RDS >> MariaDB

Sådan beskytter du din MySQL- eller MariaDB-database mod SQL-injektion:Første del

Sikkerhed er et af de vigtigste elementer i det korrekt designede databasemiljø. Der er talrige angrebsvektorer, der bruges med SQL-injektion, som nok er den mest populære. Du kan designe forsvarslag i applikationskoden, men hvad kan du gøre på databaselaget? I dag vil vi gerne vise dig, hvor nemt du kan implementere SQL firewall oven på MySQL ved hjælp af ProxySQL. I den anden del af denne blog vil vi forklare, hvordan du kan oprette en hvidliste over forespørgsler, der har tilladelse til at få adgang til databasen.

For det første ønsker vi at implementere ProxySQL. Den nemmeste måde at gøre det på er at bruge ClusterControl. Med et par klik kan du implementere den til din klynge.

Definer, hvor den skal installeres, du kan enten vælge eksisterende vært i klyngen eller bare skriv en hvilken som helst IP eller værtsnavn ned. Indstil legitimationsoplysninger til administrations- og overvågningsbrugere.

Så kan du oprette en ny bruger i databasen, der skal bruges med ProxySQL eller du kan importere en af ​​de eksisterende. Du skal også definere de databasenoder, du vil inkludere i ProxySQL. Svar, hvis du bruger implicitte transaktioner eller ej, og du er klar til at implementere ProxySQL. Om et par minutter er en ProxySQL med konfiguration forberedt baseret på dit input klar til brug.

I betragtning af vores problem er sikkerhed, vil vi gerne være i stand til at fortælle ProxySQL, hvordan man håndterer upassende forespørgsler. Lad os tage et kig på forespørgselsreglerne, kernemekanismen, der styrer, hvordan ProxySQL håndterer den trafik, der passerer gennem den. Listen over forespørgselsregler kan se sådan ud:

De anvendes fra det laveste ID og fremefter.

Lad os prøve at oprette en forespørgselsregel, som kun tillader SELECT-forespørgsler for en bestemt bruger:

Vi tilføjer en forespørgselsregel i begyndelsen af ​​regellisten. Vi vil matche alt, der ikke er SELECTs (bemærk venligst, at Negate Match Pattern er aktiveret). Forespørgselsreglen vil kun blive brugt, når brugernavnet er 'devuser'. Hvis alle betingelserne er opfyldt, vil brugeren se fejlen som i feltet "Fejlmeddelelse".

[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)

Et andet eksempel, denne gang vil vi forsøge at forhindre ulykker relateret til Bobby Tables-situationen.

Med denne forespørgselsregel på plads vil din 'studerende'-tabel ikke blive droppet af 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, var Bobby ikke i stand til at fjerne vores 'studerende'-tabel. Han var kun pænt sat ind i bordet.


  1. liste data til brugbart format?

  2. Introduktion til SQL-gruppering og sammenlægning

  3. MySQL-forespørgsel for at få bedst sælgende produkter

  4. SQL-fejl:ORA-00942 tabel eller visning findes ikke