Nawigacja
Jak pisa? bezpieczne MOD'y i INFUSION'y
Napisane przez Wooya
dnia 08 kwietnia 2007 15:57 ·
4 komentarze ·
9251 czytań ·
·
·
Streszczenie:
Krótki instruktarz dla bardziej twórczych ;)Wiemy, ?e bezpiecze?stwo PHP-Fusion jest spraw? bardzo wa?n? (np. odporno?? na ataki XSS, SQL Injection, DoS). Chc? tutaj opisa? jak pisa? bezpieczne modu?y i infusiony przy u?yciu funkcji ogólnie dost?pnych w core (j?drze) PHP-Fusion.
1) prawa u?ytkowników:
aby sprawdzi? poziom u?ytkownika (level) u?ywaj wbudowanych sta?ych: iGUEST, iUSER, iMEMBER, iADMIN, iSUPERADMIN, iUSER_RIGHTS, iUSER_GROUPS i funkcji sprawdzaj?cych checkrights(), getuserlevel(), checkgroup(), groupaccess().
Nie próbuj napisa? swoich w?asnych, "lepszych" procedur ;)
2) zapytania MySQL:
zawsze u?ywaj wbudowanych PHP-Fusion funkcji obs?ugi bazy MySQL, aby wykonywa? swe kwerendy:
- dbquery() - aby wys?a? zapytanie
- dbrows() - aby pobra? ilo?? dost?pnych wierszy w wyniku
- dbcount() - aby policzy? ilo?? danych w wyniku
- dbresult() - aby pobra? wynik
- dbarray() - aby pobra? dane do tablicy asocjacyjnej
- dbarraynum() - aby pobra? konkretny wiersz z wyniku
W wi?kszo?ci przypadków te funkcje s? wystarczaj?ce do obs?ugi Twojej bazy danych.
NOTKA: Pami?tajcie, aby optymalizowa? swoje zapytania do bazy! Serwery niezbyt kochaj? tysi?ce kwerend przy jednym prze?adowaniu strony ;)
3) zmienne serwera $_POST i $_GET:
- zawsze pami?taj, aby usuwa? potencjalnie z?o?liwe dane PHP i HTML z przesy?anych ci?gów przy pomocy funkcji stripinput(), np.:
Ta funkcja zamienia wszystkie potencjalnie niebezpieczne HTML'owe znaki na ich symboliczne odpowiedniki.
- je?eli przesy?ana zmienna POST/GET powinna by? numeryczna, to do sprawdzenia tego u?ywaj funkcji isNum(). Je?eli przesy?ana warto?? numeryczna jest niezb?dna do wstawienia do tabeli, to u?ywaj kodu sprawdzaj?cego jak np. poni?ej:
w innym wypadku:
- nigdy nie wysy?aj poprzez zmienn? ?rodowiskow? GET wa?nych danych takich jak has?a!
- staraj si? operowa? na bazie danych poprzez poja ID (numeryczne). O wiele pro?ciej sprawdzi? bezpiecze?stwo parametru je?eli jest warto?ci? numeryczn? ni? tekstow? (przez funkcje isNum()). Parsowanie ci?gów tekstowych wymaga dobrej znajomo?ci funkcji ekspresyjnych PCRE.
4) inne problemy:
- zawsze umieszczaj na wst?pie swojego infusiona administracyjnego nast?puj?cy kod:
- zawsze umieszczaj na wst?pie swojego panelu nast?puj?cy kod:
- zawsze umieszczaj nast?puj?cy kod na wst?pie swoich include'ów:
- zawsze weryfikuja upload'owane obrazki poprzez funkcj? verify_image(). Pami?taj, ?e niektóre przegl?darki (wiesz, KTÓRA ;) mog? wykonywa? niebezpieczne (z?o?liwe) kody JavaScript poprzez tagi HTML'a
- nie zostawiaj ostrze?e? e_notice samym sobie. Je?eli ju? si? jaki? pojawia, to oznacza, ?e istnieje potencjalna dziura do wykorzystania przez haker'ów. Deklaruj zmienne z domy?ln? warto?ci?, które b?dziesz wykorzystywa?. Przyk?ad bez deklaracji (ostrze?enie e_notice):
Powy?szy skrypt wyda sotrze?enie: Variable $result not defined at line XXX.
Poni?ej poprawiony skrypt bez ostrze?enia:
-----------------------------
Ten artyku? nie obejmuje wszystkich zagadnie? bezpiecze?stwa skryptów PHP, ale powinien pomóc m?odym programistom w pisaniu bardziej bezpiecznych skryptów dla PHP-Fusion.
Pozdrówka:
Wooya
wooya [at] 2loud [dot] net [dot] pl
Komentarze
Dodaj komentarz
Oceny
Zaloguj się lub zarejestruj, żeby móc zagłosować.
Świetne! | ![]() |
100% | [1 głos] |
Bardzo dobre | ![]() |
0% | [0 głosów] |
Dobre | ![]() |
0% | [0 głosów] |
Średnie | ![]() |
0% | [0 głosów] |
Słabe | ![]() |
0% | [0 głosów] |