Я ищу самый безопасный способ запрета размещения моей веб-формы, использующей PHP и MySQL, с удаленного сайта. Я провел некоторый поиск и обнаружил, что большинство людей предлагают установить скрытое поле в форме и переменную сеанса со значением хеша md5 () и проверить его при отправке формы. Но это кажется не очень безопасным, потому что значение хеша md5 () можно увидеть в источнике формы в скрытом значении.
Вот моя идея, чтобы запретить отправку форм вне сайта. Это немного более ресурсоемко с вызовами базы данных, но выглядит более безопасным, потому что хэш кода никогда не отправляется на клиентскую сторону.
Пожалуйста, посмотрите на это и посмотрите, можете ли вы сделать какие-либо пробелы в этой мере безопасности, чтобы предотвратить пост-формы постов.
// First time form loads
if (!$_POST) {
session_start();
$code_options = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9');
for ($i=1; $i<=20; $i++) {
$code .= array_rand(array_flip($code_options), 1);
}
// Insert new record
$con = connect_to_db(); // connects to db
$sql = "INSERT INTO security_table (form_code) values('$code')";
$result = run_query($sql, $con); // runs the query
$_SESSION['formcode'] = $code;
$_SESSION['formid'] = mysql_insert_id();
}
// If form was posted to
if ($_POST) {
session_start();
$con = connect_to_db();
$form_code = mysql_real_escape_string($_SESSION['formcode']);
$form_id = mysql_real_escape_string($_SESSION['formid']);
$sql = "SELECT form_code FROM security_table WHERE form_code = '$form_code' AND form_id = '$form_id '";
$result = run_query($sql, $con);
if (mysql_num_rows($result) > 0) {
// Process the form
// If form processes successfully
$_SESSION['formcode'] = "";
$_SESSION['formid'] = "";
}else{
// Error
}
}