Els atacs d'injecció de SQL suposen un gran risc per a aplicacions web que depenen d'un backend de la base de dades per generar contingut dinàmic. En aquest tipus d'atac, els hackers manipulen una aplicació web en un intent d'injectar els seus propis comandaments SQL en els emesos per la base de dades. Per obtenir un exemple, vegeu l'article SQL Injection Attacks on Databases. En aquest article, fem una ullada a diverses maneres en què podeu provar les vostres aplicacions web per determinar si són vulnerables als atacs d'injecció de SQL.
Escaneig automàtic d'injecció de SQL
Una possibilitat és utilitzar un escàner de vulnerabilitat d'aplicacions web automatitzat, com ara WebInspect d'HP, AppScan d'IBM o Hailstorm de Cenzic. Totes aquestes eines ofereixen maneres fàcils i automatitzades d'analitzar les vostres aplicacions web per a possibles vulnerabilitats d'injecció de SQL. No obstant això, són bastant cars, amb un màxim de 25.000 dòlars per seient.
Proves manuals d'injecció de SQL
Què ha de fer un desenvolupador d'aplicacions? Realment podeu executar algunes proves bàsiques per avaluar les vostres aplicacions web per a les vulnerabilitats d'injecció de SQL que utilitzen res més que un navegador web. En primer lloc, una paraula de precaució: les proves que descrivim només busquen errors bàsics d'injecció de SQL. No detectaran tècniques avançades i són una mica tedioses d'utilitzar. Si ho podeu permetre, aneu amb un escàner automatitzat. Tanmateix, si no podeu gestionar aquest preu, les proves manuals són un gran primer pas.La forma més senzilla d'avaluar si una aplicació és vulnerable és experimentar amb atacs d'injecció innocus que no perjudiquin la vostra base de dades si ho aconsegueixen, però us proporcionaran proves que cal corregir un problema. Per exemple, suposem que tenia una aplicació web senzilla que busca un individu en una base de dades i, per tant, proporciona informació de contacte. Aquesta pàgina podria utilitzar el següent format d'URL: http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike
Podem suposar que aquesta pàgina realitza una cerca de bases de dades, mitjançant una consulta similar a la següent: SELECCIONE el telèfon
Del directori FROM
WHERE lastname = 'chapple' i firstname = 'mike'
Anem a experimentar amb això una mica. Amb el nostre supòsit anterior, podem fer un canvi senzill a l'URL que proveeix els atacs d'injecció de SQL: http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike'+AND+(select+count(*)+de+fake)+%3e0+OR+'1'%3d'1
Si l'aplicació web no ha estat protegida correctament contra la injecció de SQL, només connecta aquest nom fals a la instrucció SQL que executa contra la base de dades, el que resulta en: SELECCIONE el telèfon
Del directori FROM
WHERE lastname = 'chapple' i firstname = 'mike'
I (seleccioneu el recompte (*) de fals)> 0
O '1' = '1'
Notaràs que la sintaxi anterior és una mica diferent a la de l'URL original. Es va prendre la llibertat de convertir la variable codificada per URL per als seus equivalents ASCII per facilitar l'exemple. Per exemple,% 3d és la codificació d'URL per al caràcter '='. També hem afegit alguns salts de línia amb finalitats similars. La prova apareix quan intenteu carregar la pàgina web amb l'URL que es mostra més amunt. Si l'aplicació web es comporta bé, esborraran les cometes individuals de l'entrada abans de passar la consulta a la base de dades. Això simplement donarà lloc a una cerca estranya per algú amb un primer nom que inclogui un grup de SQL. Veureu un missatge d'error de l'aplicació similar al següent: Error: cap usuari trobat amb el nom mike + AND + (seleccioneu + compte (*) + de + fals) +% 3e0 + O + 1% 3d1
Chapple!
D'altra banda, si l'aplicació és vulnerable a la injecció SQL, passarà directament la declaració a la base de dades, resultant en una de dues possibilitats. En primer lloc, si el vostre servidor té activats els missatges d'error detallats (que no heu de fer), veureu una cosa així: Proveïdor OLE DB de Microsoft per a controladors ODBC error '80040e37'
Microsoft Controlador ODBC SQL Server SQL Server Nom d'objecte invàlid 'fals'.
/directori.asp, línia 13
D'altra banda, si el vostre servidor web no mostra missatges d'error detallats, obtindreu un error més genèric, com ara: error del servidor internEl servidor ha trobat un error intern o una configuració incorrecta i no ha pogut completar la vostra sol·licitud.
Poseu-vos en contacte amb l'administrador del servidor per informar de la data en què va passar l'error i de qualsevol cosa que hagués pogut fer que hagués causat l'error.
És possible que hi hagi més informació sobre aquest error en el registre d'errors del servidor.
Si rebeu un dels dos errors anteriors, la vostra aplicació és vulnerable a l'atac d'injecció de SQL. Alguns passos que podeu dur a terme per protegir les vostres aplicacions contra els atacs d'injecció de SQL inclouen: Avaluació dels resultats













