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
-
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
AI v programování: Jak používat GitHub Copilot (část 1)
12. února 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024