Zabezpiecz swój kod PHP
- Niezbędne jest zapewnienie bezpiecznych danych od użytkowników (formularze i adresy URL itp.) Oprócz serwera systemu operacyjnego i serwera http, głównie z powodu ataku internetowego.
- Istnieją 3 kategorie do zabezpieczenia kodu php:
Sprawdzanie poprawności użytkowników danych
Gdy witryna oferuje formularze umożliwiające użytkownikom przechwytywanie i wysyłanie treści, nie jest to wystarczające do wskazania formatu wpisów (adres e-mail, numer telefonu, ilość produktów). Serwer również powinien być monitorowany (np. PHP), jeśli dane są zgodnie z naszymi oczekiwaniami. Biorąc pod uwagę liczby całkowite, przekonwertuj wszystkie dane wysłane przez użytkownika:
Sprawdź poprawność danych z adresu URL lub formularzy
Prawie wszystkie otrzymane dane pochodzą z adresu URL lub formularzy skonfigurowanych przez webmastera. Prawie wszystkie parametry wyświetlania adresu URL określające jak poniżej:
/index.php?rub=25
Ten parametr nie powinien być jednak modyfikowany. Ale jest to możliwe jak poniżej:
/index.php?rub=0 /index.php?rub= /index.php?rub=aaaaAAAAAaaaa /index.php?rub=1+or+1
- Ważne jest, aby sprawdzić, czy format otrzymany za pośrednictwem adresu URL lub formularza jest oczekiwany niezależnie od rodzaju danych.
- Możesz użyć funkcji filter_input (), aby zweryfikować to samo.
- Na przykład, jeśli otrzymałeś wiadomość e-mail od użytkownika z posta formatu z nazwą pola jako e-mail. Możesz odzyskać to przez:
$ email = filter_input (INPUT_POST, 'email', FILTER_VALIDATE_EMAIL); if ($ email) {// Wpis adresu e-mail jest rzeczywiście formatem adresu poczty}
Ta funkcja może filtrować wiele rzeczy: adres IP, adres URL itp. Mogą wystąpić modyfikacje, takie jak łańcuch kodowania, przed wysłaniem przez URL jako proces przez htmlentities ().
- Kilka filtrów można łączyć za pomocą „|” .
- Aby zweryfikować adres IP tylko w formacie Ipv4:
$ ip = filter_input (INPUT_GET, 'ip', FILTER_VALIDATE_IP | FILTER_FLAG_IPV4);
Kliknij następujący link dla filtrów:
//www.php.net/filter
Pomiń wyświetlaną zawartość adresu URL
Gdy treść wprowadzona przez użytkownika jest wyświetlana na ekranie, zawiera kod HTML lub JavaScript, który jednak wymaga obowiązkowej ochrony.
Jeśli treść ma być wyświetlana w html: musisz HTMLencode ustawić, aby przekonwertować wszystkie znaki w równoważnych obiektach HTML. Poniżej znajduje się funkcja php do automatyzacji tego procesu:
echo htmlentities ($ _ REQUEST ['content']);
Jeśli treść powinna być wyświetlana w adresie URL: musisz urlencode treści.
PHP ma dwie funkcje do wykonania tego kodowania: urlencode () i rawurlencode (). Różnica między tymi dwiema funkcjami polega na kodowaniu obszaru, który w pierwszej funkcji daje i zapewnia% 20 i „+” w drugiej.
echo '//www.website?valeur='.urlencode($_REQUEST['value']);
Jeśli zawartość powinna być przechowywana w bazie danych: konieczne jest uniknięcie wszystkich znaków o określonej roli w używanym serwerze bazy danych. Dla PHP i MySQL, funkcja mysql_escape_string () sprawia, że wszystkie potencjalnie szkodliwe znaki w łańcuchu są przekazywane jako parametr.
$ query = 'SELECT id FROM matable WHERE user = "'. mysql_escape_string ($ _ REQUEST ['użytkownik']). '"';
Zauważ, że serwer jest skonfigurowany z opcją PHP magic_quotes, dane przesyłane przez użytkowników są automatycznie chronione odwrotnymi ukośnikami (odwrotny ukośnik). Zatem przed ochroną mysql_escape_string powinieneś „cofnąć” tę podstawową ochronę:
$ query = 'SELECT id FROM mytable WHERE user = "'. stripslashes (mysql_escape_string ($ _ REQUEST ['użytkownik'])). '"';