Я новичок в PHP.
То, что я пытаюсь сделать, это остановить отправку данных Post с другой веб-страницы.
Проблема, с которой я сталкиваюсь, это сказать, что кто-то копирует мою форму и вставляет ее на свой сайт. Я хочу, чтобы это можно было остановить, чтобы Post Data запускала сценарий в моей электронной почте.
Как я могу это сделать? Дайте мне знать, если я не буду достаточно ясным.
Моя контактная форма PHP работает на одной странице с условными операторами. т.е. если данные проверяются, отправьте.
$ _SERVER ['HTTP_Referrer'] было бы неплохо, но это ненадежно. Вы можете использовать скрытое поле формы, которое MD5 что-то, а затем вы проверяете его с другой стороны.
Вы пытаетесь предотвратить CSRF – кросс-сайт запроса Forgery . Об этом Джефф сам пишет в блоге.
Истинная защита XSRF требует трех частей:
В виде:
<? $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'];?>' />
и вы можете проверить это, когда решаете, обрабатывать ли данные формы.