Как запретить другим пользователям отправлять свои собственные данные на мою php-страницу?

Предположим, у меня есть страница регистрации на моем веб-сайте, которая содержит регистрационную форму:

<form action="register.php" method="post"> <input name="..."> <input...> ... <input type='submit'> </form> 

Затем кто-то сделал свою страницу и использовал страницу действия моей формы:

 <form action="http://mywebsitename.com/register.php" method="post"> 

Может ли он опубликовать свои собственные данные на мою страницу таким образом? Если да, то как я могу это предотвратить?

Edit: Кажется, что использование токена и сохранение его значения в переменной сеанса не мешает кому-либо передавать данные из его собственной формы (даже если токен генерируется каждый запрос страницы), сначала открыв мою исходную страницу (так что сеанс для него запускается и создается токен для этого сеанса), а затем используя этот токен в его собственной форме, пока он все еще находится в сеансе.
Поэтому я думаю, что Квентин прав, данные должны быть проверены в любом случае на странице действия до его принятия.

Спасибо всем.

Данный:

  • Алиса, человек с браузером
  • Боб, человек с сайтом (вы)

Боб не может контролировать, что представляет Алиса. Ваш HTTP-сервер – это ваш открытый интерфейс, и вы не контролируете, что происходит за его пределами.

Вы должны:

  • решить, насколько вы доверяете данным, поступающим (auth / authz может помочь здесь)
  • (проверить, выглядит ли это правдоподобно (это дата, дата? это третья регистрация учетной записи с одного и того же IP-адреса за последние 10 минут?))
  • прежде чем использовать его в качестве кода (например, в операторах SQL или HTML-документах)

Если мы добавим к списку игроков:

  • Мэллори, злонамеренный человек с другим сайтом

Вы можете сделать это очень сложно, чтобы Мэллори обманул Алису за отправку вредоносных данных (которые будут поступать с учетными данными пользователя Алисы). Следует использовать обычную защиту от CSRF (то есть токенов, которые являются уникальными за сеанс и хранятся в данных сеанса и в виде скрытого ввода).

Вы можете включить токен в свою форму, который будет знать только ваш сайт (и сохранить его в переменной сеанса). Затем, когда форма отправлена, вы проверяете, существует ли этот токен и действителен. Если это так, продолжайте обработку формы. Если это не так, сделайте ошибку.

Это также очень полезно для защиты от атак типа Cross-Site Request Forgery (CSRF) .

Один из методов – иметь токен (который может быть длинной строкой случайных букв и цифр), который вы помещаете в скрытое поле ввода в своей форме. Например

 <form action="register.php" method="post"> <input type="hidden" name="token" value="345kfnakvngk3kglvnd00dsg9" /> </form> 

Затем, когда вы обрабатываете форму отправки, вы можете проверить, существует ли этот токен, и он соответствует ожидаемому вами токену. Конечно, кто-то может легко проверить ваш исходный код, чтобы найти токен, чтобы вы могли сделать токен, который истекает.

Например, когда страница с загрузкой формы вы можете сохранить токен на сеанс

 $_SESSION['token'] = '345kfnakvngk3kglvnd00dsg9'; 

то вы можете проверить, соответствует ли значение $_POST значению в сеансе. Используя новый токен в каждом запросе страницы, он делает его более безопасным.

Использование такого подхода должно каким-то образом остановить спамеров, но вам все равно нужно быть осторожным с тем, что вы делаете для формы, которую вы выполняете. В принципе, хорошим правилом является рассмотрение всего, что передается через вашу форму в качестве угрозы, поэтому вы захотите

  • Sanitize любые данные, которые вы собираетесь вставлять в свою базу данных
  • Извлеките любой JavaScript, который, возможно, был введен
  • Разрешать загрузку файлов с определенными расширениями

и т.д

После отправки формы запрос отправляется на страницу php. На этой странице вы используете приведенный ниже код, чтобы проверить, поступает ли его из вашего домена:

 if(parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) == "yourdomain.com") { //process the request } else { echo "Sorry"; } 

EDIT: Согласитесь. Это не безопасно. Просто плохой взлом

Создайте случайный токен и отправьте его вместе с данными формы как скрытый элемент html. Привяжите маркер вместе с сеансом пользователя и подтвердите его, как только форма будет отправлена ​​/ отправлена ​​обратно. Другой парень не может отправить этот случайный токен, так как ваш сервер не будет иметь этот токен в сеансе.

Также используйте заголовок X-Frame-Options, чтобы избежать использования вашей страницы в качестве iframe на своем веб-сайте. Надеюсь это поможет.