Удосконалюємо форму зв’язку, що зроблено на php

maque.org.ua - Українською про PHP

Як зауважив Тусько у цьому дописі, форма зв’язку, скрипт до якої я написав, занадто небезпечна, тому що там нема ніякого захисту. Саме сьогодні я і покажу, як додати певний код, що запобігатиме більшій частині можливих зловживань.

Ось так виглядає код, з яким ми почнемо працювати:

[code lang=”PHP”]

Your name

Your email address


[/code]

У даному вигляді він (скрипт) просто надсилає вказане ім’я та електронну адресу на моє мило. Також показується введене ім’я.

Передовсім слід звернути увагу на те, що там зараз для атрибута action не вказано жодного значення

[code lang=”HTML”]
action=””
[/code]

Хоча код і буде працювати, але краще це зробити ось так:

[code lang=”PHP”]
action=
[/code]

Тобто ми застосували глобальний масив $_SERVER зі значенням PHP_SELF, що спрямовує дію форми на той самий файл, де вона (форма) перебуває.

Тепер звернімо увагу на змінні, що є у коді. Найперше нас цікавить змінна $entered_name, що містить вказане у формі ім’я.

Цікаво те, що у такому вигляді текстове поле для імені буде приймати фактично будь-які символи (дужки, лапки тощо), які дозволять, скажімо, стилізувати введений текст. Наприклад, якщо Ви введете ось таке:

[code lang=”CSS”]
Vitaliy
[/code]

у Ваш код, то текст, що з’явиться, буде червоним. Пересвідчитись можна тут

Та халепа у тому, що зловмисники чи ще якісь кулхацкери можуть застосувати і більш шкідливу комбінацію символів. 🙂 Аби цьому запобігти, треба застосувати кілька вбудованих php-функцій. Зауважу, що вони не гарантують цілковитої безпеки, але більшість дірок (вразливостей) буде ліквідовано.

Перша функція – strip_tags, яка видаляє HTML і PHP теґи з рядка. Тобто якщо ми зараз застосуємо цю функцію до змінної, тобто напишемо:

[code lang=”PHP”]
$entered_name = strip_tags($entered_name);
[/code]

то потім не можна буде вводити HTML і PHP теґи у текстове поле. У цьому можна пересвідчитись, запустивши ось цей скрипт:

[code lang=”PHP”]

method=”get”>
Your name

Your email address



[/code]

Друга функція – trim. Вона видаляє пробіли з початку і кінця рядка. Тобто до змінної застосовуємо ще одну функцію:

[code lang=”PHP”]
$entered_name = trim(strip_tags($entered_name));
[/code]

Тобто код виглядати повинен так:

[code lang=”PHP”]

method=”get”>
Your name

Your email address



[/code]

Оскільки у формах зв’язку також може виникнути потреба вказати, скажімо, вік, ми зараз додамо ще одне текстове поле, куди можна буде вводити дані про вік, і застосуємо дві функції.

Отже, додаємо ще одне текстове поле:

[code lang=”HTML”]
Your age

[/code]

І виводимо його через змінну:

[code lang=”PHP”]
echo ‘
‘;
$entered_age = $_GET[‘personsAge’];
echo $entered_age;
[/code]

Але зараз проблема полягає у тому, що у поле Your age можна також ввести якесь рядкове значення (спробуйте тут), а ми, скажімо, хочемо, щоб вводились лише цифри. Для цього застосовуємо (int) у наспутпному коді:

[code lang=”PHP”]
$entered_age = (int)$_GET[‘personsAge’];
[/code]

Це призведе до того, що пропускатимуться лише числові значення. Якщо буде введено рядкове значення, то буде передаватись 0. Можна пересвідчитись у такій поведінці тут.

І наостанок застосуємо ще одну функцію, яка додасть упевненості, що дані вводяться у правильному форматі.

Функція abs() виводить абсолютне значення числа. Приклади:

[code lang=”PHP”]

[/code]

Застосовуємо цю функцію до нашого коду:

[code lang=”PHP”]
$entered_age = abs((int)$_GET[‘personsAge’]);
[/code]

Тепер у тому разі, якщо буде введено у відповідне поле ,наприклад, значення -15, ми отримаємо 15 (без мінуса).

Остаточний варіант коду:

[code lang=”PHP”]

method=”get”>
Your name

Your age

Your email address


‘;
$entered_age = abs((int)$_GET[‘personsAge’]);
echo $entered_age;
$to = “vitalmaque@gmail.com”; // змінна зі значенням адреси куди надсилати
$subj = “Тестую форму зв’язку”; // змінна зі значенням для атрибута “тема”
$message = $entered_name; // змінній даємо значення змінної $entered_name, яка у свою чергу має те значення, що отримала за допомогою $_GET[‘personsName’]
$headers = “From:”.$_GET[‘personsEmail’].””;
mail($to, $subj, $message, $headers); //застосовуємо функцію mail() з відповідними параметрами
?>
[/code]

Остаточний код можна запустити тут, а завантажити тут.

Чекаю на Ваші запитання, зауваження та поради. Якщо цей допис Вам сподобався, поділіться ним у соціальних мережах.

You may also like

5 коментарів

  1. в финальном варианте кода атрибут формы “action” не имеет значения:

    стоит заменить на:

    <form action="” method=”get”>

    так же не следует использовать короткие открывающие PHP теги – <?

    всегда нужно использовать – <?php

  2. Цікаво. Відкрив декілька нових конструкцій, які спрощують перевірку.
    P.S: Завжди користувався регулярними виразами