Elektronický obchod v ASP – zabezpečení administračního rozhraní
Zabezpečíme přístup do databáze tak, aby nedocházelo ke zneužití pomocí SQL příkazů. Zdrojové kódy uvedené v minulém článku neobsahují kontrolu vstupních dat. V případě, že někdo do vstupních polí zadá znak „;“ (středník) a poté nějaký SQL příkaz, například „DROP TABLE Admin“, tento příkaz se provede. A jak tuto bezpečnostní chybu odstranit?
Funkce CropSQLSpecialChars
Nejjednodušší a nejúčelnější způsob je odfiltrovat speciální SQL znaky pomocí standardních funkcí VBScriptu – Replace. Funkce Replace bude nahrazovat speciální znaky HTML entitami, což znamená, že znaky budou v databázi uloženy „zakódované“, ale v prohlížeči se budou zobrazovat zcela normálně.
Speciální znak | HTML entita |
‚ | #039; |
vbCrLf | <br> |
* | #042; |
; | #059; |
<%
Function CropSQLSpecialChars(ByVal Text)
Dim strTemp
‚deklarace proměnných
strTemp = Text
‚načtení vstupních dat
strTemp = Replace(strTemp, „‚“, „'“)
strTemp = Replace(strTemp, vbCrLf, „<br>“)
strTemp = Replace(strTemp, „*“, „*“)
strTemp = Replace(strTemp, „;“, „;“)
‚nahrazení speciálních znaků entitami / tagy
CropSQLSpecialChars = strTemp
‚zapsání návratové hodnoty
End Function
%>
Filtrování dat pomocí funkce CropSQLSpecialChars
Funkci CropSQLSpecialChars použijeme na každém místě, kde manipulujeme s proměnnými, jejichž hodnoty získáváme z formuláře či z řetězce QueryString. Upravený kód bude vypadat takto (upravená část zdrojového kódu z minulého článku):
Původní kód:
…
Case 4
‚upravit kategorii
If Len(Request.Form(„submit“)) > 0 Then
‚v případě, že formulář byl odeslán
intNadrazena = CInt(Request.Form(„nadrazena“))
strNazev = Request.Form(„nazev“))
strPopis = Request.Form(„popis“))
intId = CInt(Request.Form(„id“))
‚načti hodnoty z formuláře a filtrování speciálních znaků
PripojDatabazi
…
Upravený kód:
…
Case 4
‚upravit kategorii
If Len(Request.Form(„submit“)) > 0 Then
‚v případě, že formulář byl odeslán
intNadrazena = CInt(Request.Form(„nadrazena“))
strNazev = CropSQLSpecialChars(Request.Form(„nazev“))
strPopis = CropSQLSpecialChars(Request.Form(„popis“))
intId = CInt(Request.Form(„id“))
‚načti hodnoty z formuláře a filtrování speciálních znaků
PripojDatabazi
…
Kód funkce vložíme navrch každého souboru, ve kterém načítáme data z formulářů (hlavně admin.asp, prihlasit.asp a další).
Další možnosti zabezpečení
Další možností, jak administrační systém zabezpečit, je důkladně filtrovat vstupní data pomocí konverzních funkcí VBScriptu CInt, CLong, CBool, CDate
a dalších. Potenciální nebezpečí hrozí hlavně v řetězcích. Číselné či logické hodnoty nemohou být zneužity. Před samotnou konverzí datových typů je dobré ověřit, zda lze konverzi provést či zda se má nastavit implicitní hodnota.
Původní kód:
…
Case 4
‚upravit kategorii
If Len(Request.Form(„submit“)) > 0 Then
‚v případě, že formulář byl odeslán
intNadrazena = CInt(Request.Form(„nadrazena“))
strNazev = Request.Form(„nazev“))
strPopis = Request.Form(„popis“))
intId = CInt(Request.Form(„id“))
‚načti hodnoty z formuláře a filtrování speciálních znaků
PripojDatabazi
…
Upravený kód:
…
Case 4
‚upravit kategorii
If Len(Request.Form(„submit“)) > 0 Then
‚v případě, že formulář byl odeslán
If IsNumeric(Request.Form(„nadrazena“)) Then intNadrazena = CInt(Request.Form(„nadrazena“)) Else intNadrazena = 0
strNazev = CropSQLSpecialChars(Request.Form(„nazev“))
strPopis = CropSQLSpecialChars(Request.Form(„popis“))
If IsNumeric(Request.Form(„id“)) Then intId = CInt(Request.Form(„id“)) Else Err.Raise 10001, „Chyba“, „Chyba při konverzi datových typů!“
‚načti hodnoty z formuláře a filtrování speciálních znaků, konvertuj datové typy, popř. vygeneruj chybu
PripojDatabazi
…
Dnes jsme si ukázali, jak zvýšit bezpečnost našeho elektronického obchodu filtrováním vstupních dat tak, aby nemohly být spuštěny nechtěné SQL příkazy. Zabezpečení systému tímto nemusí být kompletní, ale mělo by být dostačující pro reálný provoz. Příště vytvoříme a integrujeme do stávajícího e-shopu databázi uživatelů, aby nemuseli při každém nákupu zadávat osobní data.
Pozn. red.: Seriál musel být předčasně ukončen, protože autor nedodal slíbená pokračování. Máte-li zájem v seriálu pokračovat vlastními články, prosíme, kontaktujte redakci.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Užitečné nástroje pro sledování výkonu Linuxu
31. října 2022 -
Jak zvýšit CTR vašeho e-mail marketingu
9. září 2024 -
Responzivní design: Proč by ho neměl ignorovat žádný vývojář?
27. listopadu 2023
Nejnovější
-
Jak se chránit před podvody na internetu – část 2
14. října 2024 -
Doména .io v ohrožení: Co přinese předání Čagoských ostrovů?
10. října 2024 -
Jak se chránit před podvody na internetu – část 1
8. října 2024