Nawigacja
Jak pisać bezpieczne MOD'y i INFUSION'y
Napisane przez Wooya dnia 08 kwietnia 2007 15:57 · 4 komentarze · 9055 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] |