Výukový program PHP

PHP HOME Úvod do PHP Instalace PHP Syntaxe PHP Komentáře PHP PHP proměnné PHP Echo / tisk Datové typy PHP PHP řetězce PHP čísla PHP matematika Konstanty PHP Operátoři PHP PHP If...Else...Elseif Přepínač PHP PHP smyčky Funkce PHP Pole PHP PHP Superglobals PHP RegEx

Formuláře PHP

Manipulace s formuláři PHP Ověření formuláře PHP Je vyžadován formulář PHP Adresa URL / e-mail PHP formuláře Formulář PHP dokončen

PHP pro pokročilé

Datum a čas PHP Zahrnout PHP Práce se soubory PHP PHP soubor otevřít/číst Vytvoření/zápis souboru PHP Nahrání souboru PHP PHP soubory cookie PHP relace PHP filtry Pokročilé filtry PHP Funkce zpětného volání PHP PHP JSON Výjimky PHP

PHP OOP

PHP Co je OOP PHP třídy/objekty PHP konstruktor PHP destruktor Modifikátory přístupu PHP Dědičnost PHP Konstanty PHP Abstraktní třídy PHP Rozhraní PHP Vlastnosti PHP Statické metody PHP Statické vlastnosti PHP Jmenné prostory PHP PHP Iterables

Databáze MySQL

Databáze MySQL Připojení MySQL MySQL Vytvořte DB Vytvořit tabulku MySQL Vložit data MySQL MySQL Get Last ID MySQL Insert Multiple MySQL připraveno MySQL Select Data Kde MySQL Pořadí MySQL podle Vymazání dat MySQL Aktualizace dat MySQL Limit dat MySQL

PHP XML

PHP analyzátory XML PHP SimpleXML Parser PHP SimpleXML - Získejte PHP XML expat PHP XML DOM

PHP - AJAX

Úvod do AJAXu AJAX PHP Databáze AJAX AJAX XML AJAX Live Search Anketa AJAX

Příklady PHP

Příklady PHP PHP kompilátor PHP kvíz Cvičení PHP Certifikát PHP

Reference PHP

Přehled PHP Pole PHP Kalendář PHP Datum PHP Adresář PHP Chyba PHP Výjimka PHP Souborový systém PHP PHP filtr PHP FTP PHP JSON Klíčová slova PHP PHP Libxml PHP Mail PHP matematika PHP Různé PHP MySQLi Síť PHP Ovládání výstupu PHP PHP RegEx PHP SimpleXML PHP stream PHP řetězec PHP Variable Handling PHP XML Parser PHP zip Časová pásma PHP

Ověření formuláře PHP


Tato a další kapitoly ukazují, jak používat PHP k ověřování dat formuláře.


Ověření formuláře PHP

Myslete na BEZPEČNOST při zpracování formulářů PHP!

Tyto stránky ukážou, jak zpracovávat formuláře PHP s ohledem na bezpečnost. Správné ověření dat formuláře je důležité pro ochranu formuláře před hackery a spammery!

HTML formulář, se kterým budeme v těchto kapitolách pracovat, obsahuje různá vstupní pole: povinná a volitelná textová pole, přepínače a tlačítko pro odeslání:

Pravidla ověření výše uvedeného formuláře jsou následující:

Field Validation Rules
Name Required. + Must only contain letters and whitespace
E-mail Required. + Must contain a valid email address (with @ and .)
Website Optional. If present, it must contain a valid URL
Comment Optional. Multi-line input field (textarea)
Gender Required. Must select one

Nejprve se podíváme na prostý HTML kód formuláře:



Textová pole

Pole jména, e-mailu a webu jsou prvky pro zadávání textu a pole komentáře je textová oblast. HTML kód vypadá takto:

Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>

Přepínače

Pole pohlaví jsou přepínače a kód HTML vypadá takto:

Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<input type="radio" name="gender" value="other">Other

Prvek formuláře

HTML kód formuláře vypadá takto:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Po odeslání formuláře jsou data formuláře odeslána s method="post".

Co je to proměnná $_SERVER["PHP_SELF"]?

$_SERVER["PHP_SELF"] je super globální proměnná, která vrací název souboru aktuálně spouštěného skriptu.

$_SERVER["PHP_SELF"] tedy odešle odeslaná data formuláře na stránku samotnou, místo aby přeskakoval na jinou stránku. Tímto způsobem se uživateli zobrazí chybové zprávy na stejné stránce jako formulář.

Co je funkce htmlspecialchars()?

Funkce htmlspecialchars() převádí speciální znaky na entity HTML. To znamená, že nahradí znaky HTML jako < a > znakem < a >. To brání útočníkům ve zneužití kódu vkládáním kódu HTML nebo Javascript (útoky Cross-site Scripting) do formulářů.


Velká poznámka o zabezpečení formulářů PHP

Proměnná $_SERVER["PHP_SELF"] může být použita hackery!

Pokud je na vaší stránce použito PHP_SELF, může uživatel zadat lomítko (/) a poté provést některé příkazy Cross Site Scripting (XSS).

Cross-site scripting (XSS) je typ chyby zabezpečení počítače, který se obvykle vyskytuje ve webových aplikacích. XSS umožňuje útočníkům vkládat skripty na straně klienta do webových stránek prohlížených ostatními uživateli.

Předpokládejme, že na stránce s názvem „test_form.php“ máme následující formulář:

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

Pokud nyní uživatel zadá do adresního řádku normální adresu URL, například „http://www.example.com/test_form.php“, výše uvedený kód bude přeložen na:

<form method="post" action="test_form.php">

Zatím je vše dobré.

Mějte však na paměti, že uživatel zadá do adresního řádku následující adresu URL:

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

V tomto případě bude výše uvedený kód přeložen do:

<form method="post" action="test_form.php/"><script>alert('hacked')</script>

Tento kód přidá značku skriptu a výstražný příkaz. A když se stránka načte, spustí se kód JavaScript (uživatel uvidí pole s upozorněním). Toto je jen jednoduchý a neškodný příklad, jak lze využít proměnnou PHP_SELF.

Uvědomte si, že do tagu <script> lze přidat jakýkoli kód JavaScript! Hacker může uživatele přesměrovat do souboru na jiném serveru a tento soubor může obsahovat škodlivý kód, který může změnit globální proměnné nebo odeslat formulář na jinou adresu, například za účelem uložení uživatelských dat.


Jak se vyhnout zneužívání $_SERVER["PHP_SELF"]?

$_SERVER["PHP_SELF"] exploitům se lze vyhnout použitím funkce htmlspecialchars().

Kód formuláře by měl vypadat takto:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Funkce htmlspecialchars() převádí speciální znaky na entity HTML. Pokud se nyní uživatel pokusí zneužít proměnnou PHP_SELF, výsledkem bude následující výstup:

<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">

Pokus o zneužití selže a nezpůsobí žádnou škodu!


Ověřte data formuláře pomocí PHP

První věc, kterou uděláme, je předat všechny proměnné funkcí PHP htmlspecialchars().

Když použijeme funkci htmlspecialchars(); pokud se pak uživatel pokusí odeslat do textového pole následující:

<script>location.href('http://www.hacked.com')</script>

- toto by se neprovedlo, protože by se to uložilo jako kód HTML escape, takto:

<script>location.href('http://www.hacked.com')</script>

Kód lze nyní bezpečně zobrazit na stránce nebo v e-mailu.

Když uživatel odešle formulář, uděláme také další dvě věci:

  1. Odstraňte nepotřebné znaky (mezera, tabulátor, nový řádek) ze vstupních dat uživatele (pomocí funkce PHP trim())
  2. Odstraňte zpětná lomítka (\) ze vstupních dat uživatele (pomocí funkce PHP stripslashes())

Dalším krokem je vytvoření funkce, která za nás provede veškerou kontrolu (což je mnohem pohodlnější než psát stále stejný kód).

Funkci pojmenujeme test_input().

Nyní můžeme zkontrolovat každou proměnnou $_POST pomocí funkce test_input() a skript vypadá takto:

Příklad

<?php
// define variables and set to empty values
$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;
}
?>

Všimněte si, že na začátku skriptu zkontrolujeme, zda byl formulář odeslán pomocí $_SERVER["REQUEST_METHOD"]. Pokud je REQUEST_METHOD POST, pak byl formulář odeslán – a měl by být ověřen. Pokud nebyl odeslán, přeskočte ověření a zobrazte prázdný formulář.

Ve výše uvedeném příkladu jsou však všechna vstupní pole nepovinná. Skript funguje dobře, i když uživatel nezadává žádná data.

Dalším krokem je nastavit vstupní pole jako povinná a v případě potřeby vytvořit chybové zprávy.