как проверить, выполняется ли post с использованием cURL

#forms #validation #curl #security

#формы #проверка #curl #Безопасность

Вопрос:

Простой вопрос: как определить, что данные формы, размещенные на моем сайте, выполняются через cURL, а не через страницу формы сайта.

(Например) пользователь запускает curl -H»Host: http://mysite » ОПУБЛИКОВАТЬ «опубликовать данные» http://mysite для любой формы на сайте.

Поскольку можно установить Referer и User Agent, я считаю, что они не подпадают под критерии фильтрации. Любые предложения или решения приветствуются.

Спасибо и приветствия!!

Ответ №1:

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

Если пользователь отправляет форму с устаревшим токеном, просто попросите их повторно опубликовать форму с сообщением об ошибке, в котором говорится, что форма устарела, и им нужно повторить операцию снова.

Curl может эмулировать браузер, поэтому ничто не будет эффективным на 100%, но это охватывает большинство случаев.

Вы также можете заполнить это поле токена с помощью JavaScript, поскольку curl его не выполняет.

Комментарии:

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

2. Сеансы отлично работают с анонимными пользователями, вам не нужно проверять их подлинность, чтобы этот подход работал.

Ответ №2:

Я думаю, нужно было бы проверить, была ли активирована кнопка отправки формы.

Комментарии:

1. хороший… но я мог бы отключить ложную тревогу, отключив javascript и заполнив форму, не так ли?

2. Если для проверки формы используется Javascript, то да. Также можно было бы добавить кнопку отправки формы «amp; clicked = true» к данным post формы.

Ответ №3:

Я не уверен, в чем заключается ваша проблема безопасности, поскольку вы нам не говорите. Что касается веб-сервера, cURL фактически является просто другим веб-браузером; это просто тот, который управляется аргументами командной строки, а не мышью.

Возможно, вы беспокоитесь о том, чтобы защитить себя от подделки межсайтовых запросов, и вам следует ознакомиться со шпаргалкой OWASP CSRF по предотвращению

Комментарии:

1. извините за то, что мой вопрос абстрактен .. дело в том, что мой друг работает в spring mvc, и эта проблема была поднята, заявив, что можно зациклить попадание curl и заполнить DB для страницы регистрации …. я никогда не думал об этом, и это может быть возможно в моем PHP-коде… так что почувствовал любопытство спросить об этом..

2. Защита от наводнений / DoS — это совершенно иная концепция, чем обнаружение клиента. Теоретически любой клиент может попытаться сделать это с вами. Обнаружение cURL здесь вам не очень поможет. Может быть, посмотрите на что-то вроде apache httpd-guardian (или аналогичное для выбранного вами веб-сервера), которое будет блокировать адреса, делающие слишком много запросов в течение определенного периода времени apache-tools.cvs.sourceforge.net/apache-tools

3. верно … но в моем случае это было слишком конкретно … может быть, пришло время закрыть этот вопрос, он становится очень неоднозначным …. спасибо всем за ответы и глубокое понимание этого и надеюсь, что эта тема поможет / обучит кого-то еще так же, как и мне..