Предположим, у меня есть страница регистрации на моем веб-сайте, которая содержит регистрационную форму:
<form action="register.php" method="post"> <input name="..."> <input...> ... <input type='submit'> </form>
Затем кто-то сделал свою страницу и использовал страницу действия моей формы:
<form action="http://mywebsitename.com/register.php" method="post">
Может ли он опубликовать свои собственные данные на мою страницу таким образом? Если да, то как я могу это предотвратить?
Edit: Кажется, что использование токена и сохранение его значения в переменной сеанса не мешает кому-либо передавать данные из его собственной формы (даже если токен генерируется каждый запрос страницы), сначала открыв мою исходную страницу (так что сеанс для него запускается и создается токен для этого сеанса), а затем используя этот токен в его собственной форме, пока он все еще находится в сеансе.
Поэтому я думаю, что Квентин прав, данные должны быть проверены в любом случае на странице действия до его принятия.
Спасибо всем.
Данный:
Боб не может контролировать, что представляет Алиса. Ваш HTTP-сервер – это ваш открытый интерфейс, и вы не контролируете, что происходит за его пределами.
Вы должны:
Если мы добавим к списку игроков:
Вы можете сделать это очень сложно, чтобы Мэллори обманул Алису за отправку вредоносных данных (которые будут поступать с учетными данными пользователя Алисы). Следует использовать обычную защиту от CSRF (то есть токенов, которые являются уникальными за сеанс и хранятся в данных сеанса и в виде скрытого ввода).
Вы можете включить токен в свою форму, который будет знать только ваш сайт (и сохранить его в переменной сеанса). Затем, когда форма отправлена, вы проверяете, существует ли этот токен и действителен. Если это так, продолжайте обработку формы. Если это не так, сделайте ошибку.
Это также очень полезно для защиты от атак типа Cross-Site Request Forgery (CSRF) .
Один из методов – иметь токен (который может быть длинной строкой случайных букв и цифр), который вы помещаете в скрытое поле ввода в своей форме. Например
<form action="register.php" method="post"> <input type="hidden" name="token" value="345kfnakvngk3kglvnd00dsg9" /> </form>
Затем, когда вы обрабатываете форму отправки, вы можете проверить, существует ли этот токен, и он соответствует ожидаемому вами токену. Конечно, кто-то может легко проверить ваш исходный код, чтобы найти токен, чтобы вы могли сделать токен, который истекает.
Например, когда страница с загрузкой формы вы можете сохранить токен на сеанс
$_SESSION['token'] = '345kfnakvngk3kglvnd00dsg9';
то вы можете проверить, соответствует ли значение $_POST
значению в сеансе. Используя новый токен в каждом запросе страницы, он делает его более безопасным.
Использование такого подхода должно каким-то образом остановить спамеров, но вам все равно нужно быть осторожным с тем, что вы делаете для формы, которую вы выполняете. В принципе, хорошим правилом является рассмотрение всего, что передается через вашу форму в качестве угрозы, поэтому вы захотите
и т.д
После отправки формы запрос отправляется на страницу php. На этой странице вы используете приведенный ниже код, чтобы проверить, поступает ли его из вашего домена:
if(parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) == "yourdomain.com") { //process the request } else { echo "Sorry"; }
EDIT: Согласитесь. Это не безопасно. Просто плохой взлом
Создайте случайный токен и отправьте его вместе с данными формы как скрытый элемент html. Привяжите маркер вместе с сеансом пользователя и подтвердите его, как только форма будет отправлена / отправлена обратно. Другой парень не может отправить этот случайный токен, так как ваш сервер не будет иметь этот токен в сеансе.
Также используйте заголовок X-Frame-Options, чтобы избежать использования вашей страницы в качестве iframe на своем веб-сайте. Надеюсь это поможет.