PHP 5 about PHP 5 старт PHP 5 установка PHP 5 синтаксис PHP 5 змінні PHP 5 echo і print PHP 5 типи даних PHP 5 strings PHP 5 константи PHP 5 оператори PHP 5 if...else...elseif PHP 5 switch PHP 5 цикл while PHP 5 for і foreach PHP 5 функції PHP 5 масиви PHP 5 сортування масивів PHP 5 superglobals PHP 5 форми input PHP 5 форми обробка PHP 5 форми - обов'язкові поля PHP 5 форми - перевірка електронної пошти і URL РНР 5 форми заповнення PHP 5 багатовимірні масиви PHP 5 час і дата PHP 5 include PHP 5 файли обробка PHP 5 файли Open/Read/Close PHP 5 файли створення / запис PHP 5 файли завантаження PHP MySQL бази даних PHP MySQL Підключення PHP MySQL Створення бази даних PHP MySQL Створення таблиці PHP MySQL вставка даних PHP MySQL Отримання ідентифікатора останнього доданого запису PHP MySQL вставка кількох записів PHP MySQL Підготовлені вирази PHP MySQL відображення даних з таблиці PHP MySQL Видалення даних PHP MySQL оновлення даних PHP MySQL обмежити вибірку даних PHP регулярні вирази 1 PHP регулярні вирази 2 PHP регулярні вирази 3 PHP регулярні вирази 4 PHP ООП PHP ООП class PHP ООП модифікатори доступу PHP ООП extends PHP ООП статичні методи і властивості, константи PHP ООП abstract PHP ООП interface PHP альтернативний синтаксис керуючих конструкцій

PHP 5 форми обробка


Ця і наступні глави показують, як використовувати PHP для перевірки даних форми.


PHP 5 валідація форми

Подумайте про безпеку при обробці PHP форм!

На цих сторінках будуть показані способи обробки PHP форм з урахуванням вимог безпеки. Правильна перевірка даних форми важлива для захисту своєї форми від хакерів і спамерів!

HTML форма, яку ми будемо розглядати в цих розділах, містить різні поля введення: обов'язкові та додаткові текстові поля, радіо-кнопки, і кнопка відправки.


Текстові поля вводу

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

Радіо кнопки

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

Форма елемента

HTML код форми виглядає наступним чином:

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

Коли форма відправлена, дані форми відправляються за допомогою методу = POST .

Що робить змінна $_SERVER['PHP_SELF'] ?

$_SERVER['PHP_SELF'] супер глобальна змінна, яка повертає ім'я файлу в якому виконується скрипт.

Таким чином, $_SERVER['PHP_SELF'] направляє відправлені дані форми на сторінку на якій виконується скрипт, замість того, щоб стрибати на іншу сторінку. Таким чином, користувач отримає повідомлення про помилку на тій же сторінці, де є форма.

Що робить функція htmlspecialchars() ?

Функція htmlspecialchars() перетворює спеціальні символи в HTML коді. Це означає, що вона замінить HTML символи , такі як на ( &lt; і &gt; ). Це захищає від зловмисників, щоб не запускати шкідливий код, вводячи HTML або Javascript код ( Cross-Site Scripting attacks ) в формах.


Зверніть увагу на безпеку PHP Форми

$_SERVER["PHP_SELF"] змінна може бути використана хакерами!

Якщо PHP_SELF використовується у вашій сторінці, то користувач може ввести косу риску (/), а потім деякий Cross Site Scripting (XSS) команду для виконання.

Міжсайтовий скриптинг (XSS) являє собою тип вразливості комп'ютерної безпеки, як правило, знаходяться в веб-додатках. XSS дозволяє зловмисникам виконувати ін'єкційні сценарії на стороні клієнта на веб-сторінці, які переглядаються іншими користувачами.

Припустимо, що ми маємо таку форму вводу з ім'ям my_form.php :

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

Тепер, якщо користувач входить в нормальний URL в адресному рядку, як http://www.example.com/my_form.php , наведений вище код буде переведений на:

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

Все працює нормально.

Однак, якщо користувач вводить наступний URL-адресу в адресному рядку:

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

В цьому випадку, наведений вище код буде переведений на:

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

Цей код додає тег скрипта і команду повідомлення. І при завантаженні сторінки, код JavaScript буде виконаний ( користувач побачить вікно з попередженням ). Це всього лише простий і безневинний приклад того, як змінна PHP_SELF може бути використана.

Будь-який код JavaScript може бути доданий всередині тега <SCRIPT> ! Хакер може перенаправити користувача в файл на іншому сервері, і цей файл може містити шкідливий програмний код, який може змінювати загальні змінні або представити форму на іншу адресу , щоб зберегти призначені для користувача дані, наприклад.


Як уникнути $_SERVER['PHP_SELF'] підміни?

$_SERVER['PHP_SELF'] підміни можна уникнути за допомогою функції htmlspecialchars() .

Код обробки форми повинен виглядати наступним чином:

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

Функція htmlspecialchars() перетворює HTML в спеціальні символи. Тепер, якщо користувач намагається використовувати змінну PHP_SELF , це призведе до наступного результату:

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

Спроба заміни не вдалася, і ніякої шкоди не буде зроблено!


Перевірка даних форми з PHP

Перше, що ми будемо робити, це передати всі змінні через htmlspecialchars() функції.

Ми використовуємо htmlspecialchars() функцію; якщо користувач намагається відправити наступне в текстове поле:

<script>location.href = "https://youtube.com/";</script>

Цей скрипт не буде виконано, так як в ньому буде замінено HTML-код спеціальними знаками:

&lt;script&gt;location.href = "https://youtube.com/";&lt;/script&gt;

Код тепер безпечно відображається на сторінці або в електронному листі.

Ми також будемо робити ще дві речі, коли користувач відправляє форму:

  • Обрізаємо непотрібні символи (додатковий пробіл, табуляція, символ новий рядок) з введених користувачем даних ( за допомогою функції PHP trim() )
  • Видаляємо слеш ( \ ) з введених користувачем даних ( за допомогою функції PHP stripslashes() )

Наступним кроком є ​​створення функції, яка буде робити всі перевірки для нас ( що набагато зручніше, ніж писати один і той же код знову і знову ).

Назвемо функцію clear_test_input() .

Тепер ми можемо перевірити кожну змінну $_POST з функцією clear_test_input() , і скрипт виглядає наступним чином:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<?php
// define variables and set to empty values
$name = '';
$email = '';
$gender = '';
$comment = '';
$website = '';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = clear_test_input($_POST["name"]);
$email = clear_test_input($_POST["email"]);
$website = clear_test_input($_POST["website"]);
$comment = clear_test_input($_POST["comment"]);
$gender = clear_test_input($_POST["gender"]);
}
  function clear_test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<h2>PHP Form Validation Example</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
Name: <input type="text" name="name">
<br><br>
E-mail: <input type="text" name="email">
<br><br>
Website: <input type="text" name="website">
<br><br>
Comment: <textarea name="comment" rows="5" cols="50"></textarea>
<br><br>
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
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
  <?php
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>
</body>
</html>
<!--
RESULT:
Your Input:
Andrew
Andrew@gmail.com
site4study.com
HELLO
male
-->

Зверніть увагу на те, що на початку скрипта, ми перевіряємо ​​чи була форма відправлена за допомогою $_SERVER['REQUEST_METHOD'] . Якщо REQUEST_METHOD є POST , то форма була відправлена ​​- і пройшла валідацію ( провірку ). Якщо він не був представлений, пропустити перевірку і відобразити порожню форму.

Проте, в наведеному вище прикладі, всі вхідні поля є необов'язковими. Скрипт працює відмінно, навіть якщо користувач не вводить ніяких даних.

Наступний крок, потрібно зробити поле вводу з провіркою на назаповнення і створювати повідомлення про помилки, якщо це необхідно.


Наш партнер:
beta test mp3 playlist downloader