Funkcja bezpieczeństwa PHP: strip_tags, filter_var, Md5 i sha1
⚡ Inteligentne podsumowanie
PHP Security chroni aplikacje internetowe przed atakami i nieostrożnym wprowadzaniem danych poprzez walidację, oczyszczanie i bezpieczne przechowywanie danych. Ten przewodnik omawia główne zagrożenia, a następnie strip_tags, filter_var i esca.pingoraz nowoczesne hashowanie haseł za pomocą password_hash w celu obrony przed atakami XSS, atakami SQL injection i kradzieżą danych uwierzytelniających.
Potencjalne zagrożenia bezpieczeństwa
Istnieją zasadniczo 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ą nieświadomie wprowadzić błędne parametry do formularzy, co może mieć negatywny wpływ na witrynę lub aplikację internetową.
Oto rodzaje ataków, na które musimy uważać.
SQL Injection – ten typ ataku polega na dodawaniu szkodliwego kodu SQL sprawozdania.
Można to zrobić za pomocą formularzy wprowadzania danych przez użytkownika lub URLktóre używają zmiennych.
Dołączony kod zakomentowuje 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 (XSS) – ten typ ataku polega na wstawianiu szkodliwego kodu, zwykle JavaSkrypt. Odbywa się to za pomocą formularzy wprowadzania danych przez użytkownika, takich jak formularze kontaktowe i formularze komentarzy. Ma to na celu:
- Odzyskaj poufne informacje, takie jak dane cookie
- Przekieruj użytkownika do innego URL.
Inne zagrożenia mogą obejmować wstrzyknięcie kodu PHP, wstrzyknięcie powłoki, wstrzyknięcie wiadomości e-mail i ujawnienie kodu źródłowego skryptu.
Najlepsze praktyki w zakresie bezpieczeństwa aplikacji PHP
Przyjrzyjmy się teraz niektórym najlepszym praktykom bezpieczeństwa PHP, które musimy wziąć pod uwagę podczas tworzeniaping nasze aplikacje.
Strip_tags PHP
Funkcja strip_tags usuwa kod HTML, JAVASCRIPTlub tagi PHP z ciągu.
Funkcja ta przydaje się, gdy musimy zabezpieczyć naszą aplikację przed atakami takimi jak cross-site scripting.
Rozważmy aplikację, która przyjmuje 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ś plik comments.php w folderze phptuts, przejdź do URL http://localhost/phptuts/comments.php
Załóżmy, że otrzymujesz jako dane wejściowe użytkownika następujące informacje: alert(‘Your site sucks!’);
<?php $user_input = "<script>alert(0);</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Przejdź do URL http://localhost/phptuts/comments.php
Zabezpieczmy teraz naszą aplikację przed tego typu atakami, korzystając z funkcji strip_tags.
<?php $user_input = "<script>alert(0);</script>"; echo strip_tags($user_input); ?>
Przejdź do 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.
Aby zapoznać się z pełną treścią, kliknij ten link: filtr_zmienna
Poniższy kod dotyczy systemu komentarzy. Używa on funkcji filter_var i stałej FILTER_SANITIZE_STRIPPED do usuwania tagów.
<?php $user_input = "<script>alert(0);</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
Wyjście:
alert('Your site sucks!');
Uwaga: Funkcja FILTER_SANITIZE_STRIPPED (alias funkcji FILTER_SANITIZE_STRING) jest przestarzała od wersji PHP 8.1. W nowym kodzie należy używać funkcji strip_tags() lub, dla bezpiecznego wyświetlania, htmlspecialchars().
PHP mysqli_real_escape_string
Funkcja mysqli_real_escape_string pomaga chronić aplikację przed atakami SQL injection.
Załóżmy, że mamy następujące polecenie SQL w celu sprawdzenia identyfikatora użytkownika i hasła.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
Użytkownik złośliwy może wejść 'LUB 1 = 1 — W polu tekstowym identyfikatora użytkownika wpisz 1234, a w polu tekstowym hasła 1234. Zakodujmy moduł uwierzytelniania.
<?php $uid = "0$uid1$pwd';"; echo $sql; ?>
Efektem końcowym będzie:
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
TUTAJ,
- „WHERE uid = ”” sprawdza, czy identyfikator użytkownika jest pusty
- „OR 1 = 1” to warunek, który zawsze będzie prawdziwy
- „–” komentuje część sprawdzającą hasło.
Powyższe zapytanie zwróci wszystkich użytkowników. Użyjmy teraz funkcji mysqli_real_escape_string, aby zabezpieczyć nasz moduł logowania. Zauważ, że w prawdziwym kodzie ta funkcja przyjmuje połączenie z bazą danych jako pierwszy argument.
<?php $uid = mysqli_real_escape_string($conn, "0$uid1$pwd';"; echo $sql; ?>
Powyższy kod wyświetli:
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
Uwaga: drugi pojedynczy cudzysłów został zastąpiony znakiem ucieczki, więc będzie traktowany jako część identyfikatora użytkownika, a hasło nie zostanie zakomentowane.
Najlepsze praktyki: ucieczkaping pomaga, ale sparametryzowane przygotowane instrukcje w MySQL lub PDO stanowią zalecaną obronę przed atakami typu SQL injection, ponieważ dane nigdy nie są mieszane z tekstem zapytania.
PHP Md5 i PHP sha1
MD5 to skrót od Message Digest 5, a SHA1 to skrót od Secure Hash Algorithm 1. Obie te funkcje są jednokierunkowymi funkcjami haszującymi.
Poniższy kod pokazuje 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 URL.
Ważne: MD5 i SHA1 to szybkie, niezasolone skróty, które są nie jest już uważane za bezpieczne do przechowywania haseł, ponieważ można je szybko złamać za pomocą nowoczesnego sprzętu i tablic tęczowych. Używaj ich tylko do sum kontrolnych niezwiązanych z bezpieczeństwem, a do haseł użyj poniższej metody.
Jak bezpiecznie haszować hasła w PHP
Do przechowywania haseł PHP udostępnia funkcje password_hash i password_verify. Stosują one powolny algorytm z solą (domyślnie bcrypt), dzięki czemu każdy hash jest unikalny i trudny do złamania, nawet w przypadku kradzieży bazy danych.
<?php // Hash a password before storing it in the database $hash = password_hash("mypassword", PASSWORD_DEFAULT); // Verify the password when the user logs in if (password_verify("mypassword", $hash)) { echo "Password is valid"; } else { echo "Invalid password"; } ?>
- hasło_hash() generuje zasolony hash do zapisania w bazie danych; PASSWORD_DEFAULT utrzymuje bieżący zalecany algorytm.
- hasło_weryfikuj() sprawdza próbę logowania na podstawie zapisanego skrótu, nie odszyfrowując go.
Ponieważ sól i algorytm są przechowywane w hashu, nigdy nie musisz nimi zarządzać samodzielnie, co sprawia, że jest to prawidłowy i przyszłościowy sposób obsługi haseł w PHP.





