Стоит отметить, что код, который вы видите, отправляется в базу данных как есть, запросы отправляются отдельно для предотвращения внедрения SQL. AFAIK? метки являются заполнителями, которые заменяются числовыми параметрами в базе данных, а не в спящем режиме.
$ _ SERVER ['HTTP_Referrer'] было бы неплохо, но это ненадежно. Вы можете использовать скрытое поле формы, в котором есть что-то MD5, а затем проверить его на другой стороне.
Вы пытаетесь предотвратить CSRF - подделку межсайтовых запросов . У самого Джеффа есть статья в блоге об этом.
True XSRF Prevention требует трех частей:
В форме:
<?
$password = "mypass"; //change to something only you know
$hash = md5($password . $_SERVER['REMOTE_ADDR']);
echo "<input type=\"hidden\" name=\"iphash\" value=\"$hash\"/>";
?>
Когда вы проверяете:
$password = "mypass"; //same as above
if ($_POST['iphash'] == md5($password . $_SERVER['REMOTE_ADDR'])) {
//fine
}
else {
//error
}
Если вы ищете быстрый и грязный подход, вы можете проверить Заголовок REFERER.
Если вы действительно хотите убедиться, что форма была получена с вашего сайта, вы должны генерировать токен каждый раз при загрузке формы и присоединять его к сеансу. Простой способ сделать это будет примерно так:
$_SESSION['formToken'] = sha1(microtime());
Тогда ваша форма может иметь скрытый ввод:
<input type="hidden" name="token" value='<?=$_SESSION['formToken'];?>' />
, и вы можете проверить это при принятии решения, обрабатывать ли данные вашей формы.