Funkcja bezpieczeństwa PHP: strip_tags, filter_var, Md5 i sha1
Potencjalne zagrożenia bezpieczeństwa
Zasadniczo są to dwie grupy osób, które mogą zaatakować Twój system
- Hakerzy – których celem jest uzyskanie dostępu do nieautoryzowanych danych lub zakłócenie działania aplikacji
- Użytkownicy – mogą niewinnie wprowadzić błędne parametry w formularzach, co może mieć negatywny wpływ na stronę lub aplikację internetową.
Oto rodzaje ataków, na które musimy uważać.
SQL Injection – Ten typ ataku dołącza szkodliwy kod do SQL sprawozdania.
Odbywa się to za pomocą formularzy wejściowych użytkownika lub adresów URL korzystających ze zmiennych.
Dołączony kod komentuje warunek w klauzuli WHERE instrukcji SQL. Dołączony kod może również;
- wstaw warunek, który zawsze będzie prawdziwy
- usunąć dane z tabeli
- zaktualizować dane w tabeli
- Ten rodzaj ataku jest zwykle stosowany w celu uzyskania nieautoryzowanego dostępu do aplikacji.
Skrypty między witrynami – tego typu atak zazwyczaj polega na wstawieniu szkodliwego kodu JavaSkrypt. Odbywa się to za pomocą formularzy wprowadzania danych przez użytkownika, takich jak formularze kontaktowe i formularze komentarzy. Odbywa się to w celu:
- Odzyskaj poufne informacje, takie jak dane dotyczące plików cookies
- Przekieruj użytkownika na inny adres URL.
- Inne zagrożenia mogą obejmować: wstrzykiwanie kodu PHP, wstrzykiwanie powłoki, wstrzykiwanie wiadomości e-mail, ujawnianie kodu źródłowego skryptu itp.
Najlepsze praktyki w zakresie bezpieczeństwa aplikacji PHP
Przyjrzyjmy się teraz niektórym najlepszym praktykom dotyczącym bezpieczeństwa PHP, które musimy wziąć pod uwagę podczas opracowywania naszych aplikacji.
Strip_tags PHP
Funkcje strip_tags usuwają kod HTML, JAVASCRIPT lub znaczniki PHP z ciągu znaków.
Funkcja ta jest przydatna, gdy musimy chronić naszą aplikację przed atakami typu cross-site scripting.
Rozważmy aplikację, która akceptuje komentarze od użytkowników.
<?php $user_input = "Your site rocks"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Zakładając, że zapisałeś komentarze.php w folderze phptuts, przejdź do adresu URLhttp://localhost/phptuts/comments.php
Załóżmy, że otrzymujesz następujące dane wejściowe użytkownika alert(‘Your site sucks!’);
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Przejdź do adresu URL http://localhost/phptuts/comments.php
Zabezpieczmy teraz naszą aplikację przed tego typu atakami za pomocą funkcji strip_tags.
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo strip_tags($user_input); ?>
Przejdź do adresu URL http://localhost/phptuts/comments.php
Funkcja PHP filter_var
Funkcja filter_var służy do sprawdzania poprawności i oczyszczania danych.
Walidacja sprawdza, czy dane są odpowiedniego typu. Sprawdzanie poprawności numerycznej ciągu zwraca fałszywy wynik.
Sanityzacja polega na usuwaniu nielegalnych znaków z pliku ciąg.
Sprawdź ten link, aby uzyskać pełne informacje filtr_zmienna
Kod dotyczy systemu komentowania.
Używa funkcji filter_var i stałej FILTER_SANITIZE_STRIPPED do usuwania tagów.
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
Wyjście:
alert('Your site sucks!');
Funkcja mysqli_real_escape_string Ta funkcja służy do ochrony aplikacji przed atakami typu SQL injection.
Załóżmy, że mamy następujące polecenie SQL w celu sprawdzenia poprawności identyfikatora użytkownika i hasła.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
Złośliwy użytkownik może wprowadzić następujący kod w polu tekstowym identyfikatora użytkownika. LUB 1 = 1 — I 1234 w polu tekstowym hasła Zakodujmy moduł uwierzytelniania
<?php $uid = "' OR 1 = 1 -- "; $pwd = "1234"; $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
Efekt końcowy będzie
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
TUTAJ,
- „SELECT * FROM users WHERE user_id = ”” sprawdza pusty identyfikator użytkownika
- „' OR 1 = 1” to warunek, który zawsze będzie prawdziwy
- „–” komentuje tę część, która sprawdza hasło.
Powyższe zapytanie zwróci wszystkich użytkowników. Użyjmy teraz funkcji mysqli_real_escape_string w celu zabezpieczenia naszego modułu logowania.
<?php $uid = mysqli_real_escape_string("' OR 1 = 1 -- "); $pwd = mysqli_real_escape_string("1234"); $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
Powyższy kod zostanie wyświetlony
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
Note drugi pojedynczy cudzysłów został dla nas zmieniony, będzie traktowany jako część identyfikatora użytkownika, a hasło nie będzie komentowane.
PHP Md5 i PHP sha1
Md5 to akronim Message Digest 5, a sha1 to akronim Secure Hash Algorithm 1.
Obydwa służą do szyfrowania ciągów znaków.
Gdy ciąg znaków zostanie zaszyfrowany, jego odszyfrowanie jest żmudne.
Md5 i sha1 są bardzo przydatne podczas przechowywania haseł w bazie danych.
Poniższy kod przedstawia implementację md5 i sha1
<?php echo "MD5 Hash: " . md5("password"); echo "SHA1 Hash: " . sha1("password"); ?>
Zakładając, że zapisałeś plik hashes.php w folderze phptuts, przejdź do adresu URL
Jak widać z powyższych skrótów, gdyby atakujący uzyskał dostęp do Twojej bazy danych, nadal nie znałby hasła umożliwiającego zalogowanie się.
Podsumowanie
- Bezpieczeństwo odnosi się do środków wprowadzonych w celu ochrony aplikacji przed przypadkowymi i złośliwymi atakami.
- Funkcja strip_tags służy do usuwania tagów takich jak z danych wejściowych
- Funkcja filter_var sprawdza poprawność i php oczyszcza dane wejściowe
- mysqli_real_escape_string służy do czyszczenia instrukcji SQL. Usuwa złośliwe znaki z instrukcji
- zarówno MD5, jak i SHA1 służą do szyfrowania hasła.