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

Strip_tags 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

Strip_tags 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

Strip_tags 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

PHP Md5 i PHP sha1

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.