Testen foar SQL-ynjeksje-kwetsberens

SQL-ynjeksje-oanfallen bringt grutte risiko's foar webapplikaasjes dy't ôfhinklik binne fan in database- backend om dynamyske ynhâld te generearjen. Yn dizze soarte oanfal, hackers manipulearje in webapplikaasje yn in besyk om har eigen SQL-kommando's yn te ynslaan yn dyjingen dy't útjûn binne troch de database. Sjoch foar in foarbyldbyld it artikel SQL Injection Attachments op Databases. Yn dit artikel sjogge jo in pear saken op jo websiden te hifkjen om te befestigjen oft se swakker binne foar SQL Injection-oanfallen.

Automatisearre SQL-ynjeksje-skansearring

Ien mooglikheid brûkt gebrûk fan in automatisearre webserver-kwetsberenscanner, lykas HP's WebInspect, IBM's AppScan of Cenzic's Hailstorm. Dizze ynstruminten biede allegear maklike, automatisearre manieren om jo web-tapassingen te analysearjen foar potentiale SQL Injection-kwetsessen. Dochs binne se frij djoer en rinne op oant $ 25.000 per sit.

Hânlieding foar SQL-ynjeksje

Wat is in minne applikaasje-ûntwikkelder te dwaan? Jo kinne guon basisytests realisearje om jo webapplikaasjes te evaluearjen foar SQL Injection-swierrichheden dy't net mear brûke as in webblêder. Earst, in wurd fan foarsichtichheid: de tests dy't ik beskriuw ik allinich sykje foar basis-basisyklik SQL-ynjeksje. Se sille negeare technyk net ûntdekke en binne wat langer te brûken. As jo ​​it leare kinne, gean jo mei in automatisearre scanner. As jo ​​lykwols dizze priis net behannele wurde, is it hantliedingskontrôle in geweldige earste stap.

De maklikste manier om te beoardieljen oft in applikaasje kwetsber is om te eksperimintearjen mei ûnskuldige ynfallen-oanfallen dy't jo databank net slagje as se slagje, mar jouwe jo bewiis dat jo in probleem beheine moatte. Meitsje jo bygelyks in ienfâldige webapplikaasje dy't in yndividu yn in databank siket en as resultaat kontaktpersoan jout. Dizze side kin it folgjende URL-formaat brûke:

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike

Wy kinne derop betinke dat dizze side in sykombinyk opnij útfiert, mei in query dy't ferlykber is mei de neikommende:

SELEKT tillefoan FROM directory WHERE lastname = 'chapple' en firstname = 'mike'

Lit ús eksperimintearje mei dit in bytsje. Mei ús boppesteande assuming kinne wy ​​in ienfâldige wiziging meitsje oan 'e URL dy't tests foar SQL-ynjeksje-oanfallen:

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike'+AND+(select+count(*)+from+fake)+%3e0+OR+'1'%3d'1

As de webapplikaasje net goed befeilige is tsjin SQL-ynjeksje, stoppet dizze fake earste namme yn 'e SQL-oanfetting dy't útfiert tsjin de databank, wêrtroch't:

SELEKT tillefoan FROM directory WHERE lastname = 'chapple' en earste = 'mike' AND (selekteare (*) fan fake)> 0 OR '1' = '1'

Jo sille besjen dat de hjirboppe syntax in bytsje oars as dat yn 'e orizjinele URL is. Ik naam de frijheid om de URL-kodearre fariabele om te konvertearjen foar har ASCII-ekwivalinten om it makliker te meitsjen om it foarbyld te folgjen. Bygelyks,% 3d is de URL-kodearring foar it '=' karakter. Ik haw ek inkele line breaks tafoege foar ferlykbere doelen.

Evaluearje de Resultaten

De test komt as jo besykje de webside te laden mei de hjirboppe neamde URL. As de webapplikaasje goed hâldt, sil it ienige quotes út 'e ynfier útbrekke foardat jo de query nei de databank passe. Dit sil gewoanwei in geweldige opsetting foar ien hawwe mei in earste namme dy't in bân fan SQL befettet! Jo sjogge in flaterne berjocht út 'e applikaasje dy't ferlykber is mei de hjirûnder:

Flater: Gjin brûker fûn mei namme mike + AND + (selektearje + zit (*) + fan + fake) +% 3e0 + OR + 1% 3d1 Chapple!

Oan 'e oare kant, as de applikaasje is kwetsber foar SQL-ynjeksje, sil it ferklearring direkt tagelyk oan de databank passe, sadat ien fan twa mooglikheden feroarsaakje sil. Eerst, as jo tsjinner detaillearre fereachstellingen ynskeakele hawwe (dy't jo net moatte!), Sille jo soks sjen:

Microsoft OLE-DB-foarsitter foar ODBC-triemfout '80040e37' [Microsoft] [ODBC-SQL-tsjinner [SQL Server] Unjildich objectnamme 'fake'. /directory.asp, line 13

Oan 'e oare kant, as jo webserver gjin detaillearre flater berjochten sjen lit, krije jo in generikaere flater, lykas:

Ynterne server flater De tsjinner joech in ynterne flater of missyconfiguraasje en koe jo fersyk net foltôgje. Kontrolearje asjebleaft de serverbehearder om te ynformearjen fan 'e tiid dat de flater bard is en fan alles wat jo miskien dien hawwe dat de flater feroarsake hat. Mear ynformaasje oer dizze flater kin beskikber wêze yn 'e server-flater log.

As jo ​​ien fan 'e twa boppeneamde boppeneamde ûntfange, jo applikaasje is kwetsber foar SQL-ynjeksje-oanfal! Guon stappen dy't jo kinne nimme om jo applikaasjes te beskermjen tsjin SQL Injection-oanfallen omfetsje: