2015-03-14 2 views
0

Я хочу знать, есть ли какие-либо улучшения или больше способов/решений для защиты формы, открытой для публики.Защита формы 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(); 
} 
?> 
+0

Перенаправление, если хотя бы одно из полей осталось пустым, это плохой UX - тогда пользователю нужно будет ввести все другие значения, которые они уже вводили снова. Вместо этого вы должны снова отобразить форму, со всеми полями, которые пользователь уже вводил значения для предварительно заполненных (и, вероятно, конкретных сообщений об ошибках в отношении того, что отсутствует). И использование 'htmlspecialchars' в ваших данных перед вставкой его в базу данных просто неверно - вы делаете это, когда вы _output_ данные, а не когда вы его сохраняете. И использование выходной буферизации кажется излишним здесь. – CBroe

+0

@CBroe я удалил htmlspecialchars, я понятия не имею, как делать то, что вы только что сказали мне. :(Что такое буферизация вывода? – Athax

ответ

0

Главное, что вы, возможно, ищете, - это CSLF token. Это по существу произвольно сформированный токен в вашей форме, который представляется как скрытый ввод, который затем будет аутентифицирован в вашем процессоре форм. Это поможет вам справиться с перекрестными атаками.

Вы по существу проверяете, чтобы форма от вас исходила и не предоставлялась внешним ресурсом.

+0

Я не понимаю рисков. :( – Athax

+0

Как насчет того, чтобы делать что-то вроде этого?

"> – Athax

+0

Риск состоит в том, что я мог бы сделать свою собственную форму на своем собственном сайте, который отправляется на ваш сайт. Даже если бы он был дезинфицирован с вашей стороны, вы все равно не захотели бы получать мой мусор в вашу базу данных. чтобы работать, вам нужно иметь «токен CSLF» на вашей форме, а не только на процессор. – cchapman

0

Использовать HTML символы:

<form method="post" action="<?php echo htmlspecialchars(/*Page name and extension here with root*/);?>"> 

Используйте ключи формы формы, если вы хотите: Reference (извините):

http://code.tutsplus.com/tutorials/secure-your-forms-with-form-keys--net-4753

Использование SSL Просто Google его и получить один SSl-сертификат бесплатно или оплатить его.

Использование CSRF защиты Reference (пардон):

http://shiflett.org/articles/cross-site-request-forgeries

Больше просто комментарий.

Смежные вопросы