Я хочу знать, есть ли какие-либо улучшения или больше способов/решений для защиты формы, открытой для публики.Защита формы HTML, прежде чем она отправит данные в базу данных mysqli
Я хочу сделать это как можно более безопасным.
<?php
ob_start();
$sub_firstname = trim($_POST["firstname"]);
$sub_lastname = trim($_POST["lastname"]);
$sub_email = trim($_POST["email"]);
$sub_youtube_v = trim($_POST["youtube-v"]);
$sub_youtube_c = trim($_POST["youtube-c"]);
$sub_portfoliolink = trim($_POST["portfolio-link"]);
$sub_picturelink = trim($_POST["picture-link"]);
include('../dbconnect.php');
if (empty($sub_firstname) || empty($sub_lastname) || empty($sub_email) || empty($sub_youtube_v)
|| empty($sub_youtube_c) || empty($sub_portfoliolink) || empty($sub_picturelink)) {
header ("Location: ../index.php?appform=empty");
exit;
}
$sub_firstname = $mysqli->real_escape_string($sub_firstname);
$sub_lastname = $mysqli->real_escape_string($sub_lastname);
$sub_email = $mysqli->real_escape_string($sub_email);
$sub_youtube_v = $mysqli->real_escape_string($sub_youtube_v);
$sub_youtube_c = $mysqli->real_escape_string($sub_youtube_c);
$sub_portfoliolink = $mysqli->real_escape_string($sub_portfoliolink);
$sub_picturelink = $mysqli->real_escape_string($sub_picturelink);
htmlspecialchars($sub_firstname);
htmlspecialchars($sub_lastname);
htmlspecialchars($sub_email);
htmlspecialchars($sub_youtube_v);
htmlspecialchars($sub_youtube_c);
htmlspecialchars($sub_portfoliolink);
htmlspecialchars($sub_picturelink);
if (!$mysqli->query("INSERT INTO ********* (firstname, lastname, email, youtube_v, youtube_c, portfolio_link, picture_link) VALUES('$sub_firstname', '$sub_lastname', '$sub_email', '$sub_youtube_v', '$sub_youtube_c', '$sub_portfoliolink', '$sub_picturelink')")) {
echo "Insert failed: (" . $mysqli->errno . ") " . $mysqli->error;
die();
}else{
header("Location: ../index.php?appform=success");
exit;
ob_flush();
}
?>
Перенаправление, если хотя бы одно из полей осталось пустым, это плохой UX - тогда пользователю нужно будет ввести все другие значения, которые они уже вводили снова. Вместо этого вы должны снова отобразить форму, со всеми полями, которые пользователь уже вводил значения для предварительно заполненных (и, вероятно, конкретных сообщений об ошибках в отношении того, что отсутствует). И использование 'htmlspecialchars' в ваших данных перед вставкой его в базу данных просто неверно - вы делаете это, когда вы _output_ данные, а не когда вы его сохраняете. И использование выходной буферизации кажется излишним здесь. – CBroe
@CBroe я удалил htmlspecialchars, я понятия не имею, как делать то, что вы только что сказали мне. :(Что такое буферизация вывода? – Athax