reede, 4. detsember 2009

II astme SQL süstimise tõkestamine reapiiranguga

Üks viis kuidas tõkestada SCRIPT, IFRAME, FORM, BODY ja muude murdskriptimisvõimaluste lisamist andmebaasi on panna string tüüpi väljade peale reapiirangud näiteks LIKE operandi kasutades

ALTER TABLE [dbo].[HD_PROBLEMS] WITH CHECK ADD CONSTRAINT [CK_HD_PROBLEMS_SQL_INJECTION] CHECK ((NOT [problemDescription] LIKE '%<_%')) Siin LIKE '%<_%' tähendab kõik stringid kus < järel on mingi character sümbol (ka tühik)


ALTER TABLE [dbo].[HD_PROBLEMS] WITH CHECK ADD CONSTRAINT [CK_HD_PROBLEMS_SQL_INJECTION] CHECK ((NOT [problemDescription] LIKE '%<[A-Z]%'))

Siin LIKE '%<[A-Z]%' kõik stringid kus < järel on mingi täht A kuni Z

ALTER TABLE [dbo].[HD_PROBLEMS] WITH CHECK ADD CONSTRAINT [CK_HD_PROBLEMS_SQL_INJECTION] CHECK ((NOT [problemDescription] LIKE '%<[ASIDBMFH/]%'))

Siin LIKE '%<[ASIDBMFH/]%' tähendab kõik stringid kus < järel on mingi sümbol nimekirjast ASIDBMFH/
Koos NOT-iga saame lausendi mis kontrollib "ei ole mustas nimekirjas".
Standardid soovitavad muidugi kasutada valge nimekirja kontrollimist.

Kuidas töötab

Kui nüüd üritatakse XSS-i kirjutada andmebaasi välja sisse (II astme rünnak)



siis reapiirang asub tegevusse ja andmeid muuta ei lubata