PHP Walidacja formularza
W tym rozdziale omówiono sposób korzystania z naszych danych formularza PHP przedłożone przez walidacji klienta.
PHP Walidacja formularza
Mając do czynienia z formą PHP musimy wziąć pod uwagę bezpieczeństwo. W tym rozdziale pokażemy PHP Form Processing bezpieczeństwo danych, aby zapobiec hakerów i spamu musimy zabezpieczyć walidacji danych z formularza. |
Formularz HTML opisane w tej sekcji znajdują się następujące pola wejściowe: należy stosować dodatkowe pola tekstowe, przyciski radiowe i przedkłada przyciski:
Przede postaci zasady walidacji są następujące:
pole | zasady walidacji |
---|---|
nazwa | Koniecznością. + Zawierać tylko litery i spacje |
Koniecznością. + Musi być prawidłowy adres e-mail (w tym '@' i '.') | |
teren | Koniecznością. Jeśli występuje, musi zawierać poprawny adres URL |
uwaga | Koniecznością. Pole wprowadzania multi-line (pole tekstowe) |
płeć | Koniecznością. Musisz wybrać |
Po pierwsze, spójrzmy na zwykłego kodu formularza HTML:
pole tekstowe
"Nazwa", "E-mail" i "URL" pole jest elementem wprowadzania tekstu, "Uwagi" jest polem tekstowym. Kod HTML w następujący sposób:
“名字”: <input type="text" name="name"> E-mail: <input type="text" name="email"> 网址: <input type="text" name="website"> 备注: <textarea name="comment" rows="5" cols="40"></textarea>
przycisk radiowy
"Gender" pole jest przycisk radiowy, kod HTML wygląda następująco:
性别: <input type="radio" name="gender" value="female">女 <input type="radio" name="gender" value="male">男
elementy formy
Kod HTML formularz w następujący sposób:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Użyj tego formularzamethod = "post" sposobu przekazywania danych.
Co to $ _SERVER [ ""] PHP_SELF zmienne? $ _SERVER [ "PHP_SELF"] jest zmienna globalna super, zwraca nazwę pliku aktualnie wykonywanego skryptu związaną z korzenia dokumentu. |
Tak, $ _SERVER [ "PHP_SELF"] wyśle dane formularza do bieżącej strony, zamiast skoków do innej strony.
Co to jest metoda htmlspecialchars ()? Funkcja htmlspecialchars () do kilku predefiniowanych znaków w jednostkach HTML. Predefiniowane znaki są:
|
Formularz PHP potrzebne do spowodowania uwagę na to gdzie?
$ _SERVER [ "PHP_SELF"] Zmienne mogą być wykorzystane przez hakerów!
Gdy hakerzy z wykorzystaniem cross-site scripting łącze HTTP do ataku, $ _ SERVER [ "PHP_SELF"] Zmienna zostanie wszczepiony w skrypcie serwera. Powodem jest to, że cross-site scripting plik wykonywalny jest dołączony do ścieżki tyłu, więc $ _SERVER [ "PHP_SELF"] ciąg będzie zawierać linki HTTP tył kodu JavaScript.
XSS znany również jako CSS (Script Cross-Site), cross-site scripting ataków. Złośliwy atakujący wstawić niebezpieczną stronę sieci Web w kodzie html, gdy użytkownik przegląda stronę, wbudowany Web wewnątrz kodu HTML zostaną zrealizowane, aby osiągnąć określony cel szkodliwego użytkownika. |
Podaj następujący plik formularz o nazwie "test_form.php":
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
Teraz używamy URL do złożenia określonego adresu "test_form.php", jak pokazano w powyższym kodzie wprowadza się następujące zmiany:
<form method="post" action="test_form.php">
Robi się tak dobrze.
Jednakże, biorąc pod uwagę, użytkownik będzie wprowadź następujący adres w pasku adresu przeglądarki:
http://www.w3write.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
Powyższy adres URL, będą interpretowane jako następującego kodu i wykonanie go:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>
Dodawanie skryptu kod znacznika i dodać polecenie alertu. Po załadowaniu strony zostanie wykonany kod JavaScript (użytkownik pojawi się okienko pop-up). Jest to tylko prosty przykład ilustrujący zmienna PHP_SELF zostaną wykorzystane przez hakerów.
Należy pamiętać, że każdy kod JavaScript może zostać dodany do tagu <script>! Hakerzy mogą korzystać z tej strony w celu przekierowania do serwera na innej stronie, strona pliku z kodem, aby chronić złośliwy kod, kod może zostać zmodyfikowana w celu uzyskania użytkownikowi na zmienne globalne lub dane formularza.
Jak uniknąć $ _SERVER [ "PHP_SELF"] wykorzystywaną?
$ _SERVER [ "PHP_SELF"] przez htmlspecialchars () funkcja, aby uniknąć eksploatowane.
tworzyć kod w następujący sposób:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
htmlspecialchars () do niektórych podmiotów predefiniowanych znaków w HTML. Teraz, gdy użytkownik chce korzystać z zmienne PHP_SELF wyniki są przesyłane w następujący sposób:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
Próba luka nie powiodło się!
Walidacja danych formularza wykorzystanie PHP
Przede wszystkim złożyliśmy dane do funkcji użytkownika () jest przetwarzany przez htmlspecialchars PHP.
Kiedy używamy htmlspecialchars () funkcji, użytkownik próbuje przedstawić następujące pola tekstowe:
<script>location.href('http://www.w3write.com')</script>
Kod nie zostanie wykonany, ponieważ zostanie on zapisany jako kod HTML ewakuacyjnej w następujący sposób:
<script>location.href('http://www.w3write.com')</script>
Powyższy kod jest bezpieczny i może zostać wyświetlony komunikat lub wstawić na stronie.
Gdy użytkownik wysyła formularz, zrobimy dwie następujące rzeczy:
- Wykorzystanie funkcji PHP trim (), aby usunąć dane wejściowe użytkownika niepotrzebne znaki (takie jak: przestrzeń, tabulacjami).
- Użyj stripslashes () w PHP funkcji, aby usunąć ukośnik dane wejściowe użytkownika (\)
Niech te funkcje filtrowania napisane w zależności od naszej własnej definicji, można znacznie zwiększyć możliwości ponownego wykorzystania kodu.
Funkcja nazwana test_input ().
Teraz możemy test_input funkcji () w celu wykrycia wszystkich zmiennych w $ _POST, kod skryptu jest następująca:
Przykłady
// 定义变量并默认设置为空值
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$website = test_input($_POST["website"]);
$comment = test_input($_POST["comment"]);
$gender = test_input($_POST["gender"]);
}
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
Uruchomienie instancji »
Zauważ, że gdy wykonujemy powyższy skrypt poprzez $ _SERVER [ "REQUEST_METHOD"], aby wykryć, czy formularz jest składany. Jeśli REQUEST_METHOD jest POST, formularz zostanie złożony - dane będą weryfikowane. Jeśli formularz nie zostanie złożone pominie weryfikację i wyświetla pusty.
Za pomocą elementów wejściowych w powyższych przykładach są opcjonalne, nawet jeśli użytkownik nie wprowadzać żadnych danych mogą być wyświetlane niepoprawnie.
W następnym rozdziale opiszemy jak do sprawdzania poprawności danych wprowadzonych przez użytkownika.