Остановить подделанные формы представления - PullRequest
2 голосов
/ 09 февраля 2012

У меня есть вопрос о прекращении подачи поддельных форм.Как насчет того, если с помощью $_SERVER['HTTP_REFERER'] я разрешу отправлять только анкеты с моего сайта?Это поможет?Спасибо!

Ответы [ 11 ]

5 голосов
/ 09 февраля 2012

Это поможет, и это довольно легко добавить, но это не остановит целевую атаку, ведь вы можете подделать заголовок HTTP_REFERER.

Следует помнить, что клиентне требуется отправлять HTTP_REFERER, поэтому, если заголовок отсутствует, вы все равно можете разрешить отправку.Если это невозможно, тогда проверка HTTP_REFERER вам не поможет.

Запустите поиск CAPTCHA «Полностью автоматизированный тест Public Turing, чтобы сказать« Компьютеры и люди отдельно »* , это то, что выдействительно ищем.

3 голосов
/ 09 февраля 2012

Давайте проясним: технически невозможно предотвратить подделку представлений в форме.Суммируя это в одном предложении:

Если ваш браузер может сделать это, каждый может сделать это.

2 голосов
/ 09 февраля 2012

Основные проблемы с подделкой форм - это то, что вы не можете контролировать то, что отправляет клиент.Пользователь может изменить любой параметр формы.Таким образом, все, что клиент отправляет при отправке формы, должно быть проверено и проверено.

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

Другая проблема заключается в том, что параметры формы, которые должны бытьотправка для успешной отправки формы вполне предсказуема, так что злоумышленник может отправлять неоднократно действительные представления формы.Если вам потребуется непредсказуемый параметр, который может быть выдан только вашим сервером и который проверяется при отправке формы, вы можете убедиться, что отправка формы предоставлена.

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

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

Лучше всего было бы использовать комбинацию всех упомянутых выше мер:

  • создать контейнер формы всеанс с достаточно случайным идентификатором;поместите этот идентификатор как скрытое поле ввода в форму, чтобы идентифицировать контейнер формы при отправке формы
  • сохранить любые предустановленные параметры в контейнере формы вместо формы
  • , если предустановленные параметры не могут быть исключены изформа, аутентифицируйте ее значение с помощью MAC (используйте ключ контейнера для формы)
  • , если есть подозрительно повторяющиеся запросы формы / отправки формы, подумайте о дополнительном использовании Captchas для предотвращения автоматических запросов

Кроме того, эти контейнеры форм на основе сеанса также предотвращают CSRF , поскольку их идентификаторы непредсказуемы для атакующей третьей стороны.

0 голосов
/ 22 марта 2017

Рекомендуется использовать токен. Если вы используете какую-либо из популярных архитектур MVC, вам не нужно беспокоиться, поскольку предотвращается спуфинг. Но если вы работаете с такой же архитектурой MVC, как и я, токен - это подход. В вашем классе Database для каждой функции CRUD (CREATE, READ, UPDATE AND DELETE) проверьте токен. например токен может быть сгенерирован через md5.

public function save(){
if(isset($_SESSION['token']){
//proceed with saving
}else{
//kill it,
die;
}
}

Кроме того, вы можете легко интегрировать свое веб-приложение с этим комплектом защиты от подделки межсайтовых запросов. Проверьте это здесь

0 голосов
/ 09 февраля 2012

Без определения «подделки» это был бы пустой разговор.

Существует дюжина разных «подделок», каждая со своей защитой.

Наиболее распространенным решением является CAPTCHA.

0 голосов
/ 09 февраля 2012

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

Вот хорошее обсуждение того, как это делается в ASP.NET MVC:http://blog.stevensanderson.com/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

0 голосов
/ 09 февраля 2012

Не очень помогает.Читать это: http://shiflett.org/articles/form-spoofing

0 голосов
/ 09 февраля 2012

Попробуйте капчу типа ReCaptcha . Вы не только предотвратите спам-боты от спама на вашем сайте, но также сможете «авторизовать» только тех людей, которые используют вашу форму (по крайней мере, до некоторой степени - им потребуется загрузить вашу форму, чтобы получить капчу, а затем отправить ответ).

0 голосов
/ 09 февраля 2012

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

0 голосов
/ 09 февраля 2012

Реферер легко подделан.

Вы должны проверить форму как можно лучше, чтобы поймать глупых ботов, и, возможно, использовать CAPTCHA на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...