sql >> Database >  >> RDS >> MariaDB

Hoe u uw MySQL- of MariaDB-database kunt beschermen tegen SQL-injectie:deel één

Beveiliging is een van de belangrijkste elementen van een goed ontworpen database-omgeving. Er worden talloze aanvalsvectoren gebruikt, waarbij SQL-injectie waarschijnlijk de meest populaire is. U kunt verdedigingslagen in de applicatiecode ontwerpen, maar wat kunt u doen op de databaselaag? Vandaag willen we u laten zien hoe eenvoudig u een SQL-firewall bovenop MySQL kunt implementeren met behulp van ProxySQL. In het tweede deel van deze blog leggen we uit hoe je een whitelist kunt maken van zoekopdrachten die toegang hebben tot de database.

Eerst willen we ProxySQL implementeren. De eenvoudigste manier om dit te doen, is door ClusterControl te gebruiken. Met een paar klikken kunt u het in uw cluster implementeren.

Bepaal waar u het wilt implementeren, u kunt een bestaande host in het cluster kiezen of schrijf gewoon een IP of hostnaam op. Stel inloggegevens in voor beheerders en toezichthoudende gebruikers.

Vervolgens kunt u een nieuwe gebruiker in de database maken om met ProxySQL te gebruiken of u kunt een van de bestaande importeren. U moet ook de databaseknooppunten definiëren die u in de ProxySQL wilt opnemen. Antwoord of u al dan niet impliciete transacties gebruikt en u bent helemaal klaar om ProxySQL te implementeren. In een paar minuten is een ProxySQL met configuratie opgesteld op basis van uw input klaar voor gebruik.

Gezien ons probleem veiligheid is, willen we ProxySQL kunnen vertellen hoe ongepaste zoekopdrachten moeten worden afgehandeld. Laten we eens kijken naar de queryregels, het kernmechanisme dat bepaalt hoe ProxySQL omgaat met het verkeer dat er doorheen gaat. De lijst met zoekregels kan er als volgt uitzien:

Ze worden toegepast vanaf de laagste ID.

Laten we proberen een queryregel te maken die alleen SELECT-query's voor een bepaalde gebruiker toestaat:

We voegen een queryregel toe aan het begin van de lijst met regels. We gaan alles matchen dat geen SELECT is (let op:Negate Match Pattern is ingeschakeld). De queryregel wordt alleen gebruikt als de gebruikersnaam 'devuser' is. Als aan alle voorwaarden is voldaan, ziet de gebruiker de fout zoals in het veld "Foutbericht".

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

Nog een voorbeeld, deze keer zullen we proberen ongelukken met betrekking tot de Bobby Tables-situatie te voorkomen.

Als deze queryregel is ingesteld, zal uw 'studenten'-tabel niet laten vallen door 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;

Zoals je kunt zien, kon Bobby onze tabel 'studenten' niet verwijderen. Hij werd alleen netjes in de tafel gestoken.


  1. Createuser:kon geen verbinding maken met database postgres:FATAL:rol tom bestaat niet

  2. Migreren van MSSQL naar PostgreSQL - wat u moet weten

  3. Netwerktime-out instellen voor JDBC-verbinding

  4. Vensterfuncties en meer lokale aggregatie