Прекратить отправку данных из разных доменов PHP

Я новичок в PHP.

То, что я пытаюсь сделать, это остановить отправку данных Post с другой веб-страницы.

Проблема, с которой я сталкиваюсь, это сказать, что кто-то копирует мою форму и вставляет ее на свой сайт. Я хочу, чтобы это можно было остановить, чтобы Post Data запускала сценарий в моей электронной почте.

Как я могу это сделать? Дайте мне знать, если я не буду достаточно ясным.

Моя контактная форма PHP работает на одной странице с условными операторами. т.е. если данные проверяются, отправьте.

$ _SERVER ['HTTP_Referrer'] было бы неплохо, но это ненадежно. Вы можете использовать скрытое поле формы, которое MD5 что-то, а затем вы проверяете его с другой стороны.

Вы пытаетесь предотвратить CSRF – кросс-сайт запроса Forgery . Об этом Джефф сам пишет в блоге.

Истинная защита XSRF требует трех частей:

  • Скрытые поля ввода, чтобы кто-то не мог просто выхватить форму и вставить ее
  • Timechecking внутри эпсилон формы, сгенерированной, в противном случае кто-то может создать действительную форму один раз и использовать токен (в зависимости от импментации / того, как он хранится)
  • Куки-файлы: это значит, что вредоносный сервер не притворяется клиентом и выполняет атаку «человек-в-середине»

В виде:

<? $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'];?>' /> 

и вы можете проверить это, когда решаете, обрабатывать ли данные формы.