Как передать POST-данные на внешний сайт после аутентификации recaptcha? - PullRequest
0 голосов
/ 14 января 2019

У меня есть форма, где действие представляет собой скрипт на другом сайте, и мне нужно отфильтровать спам. Я настроил recaptcha v2 и изменил действие формы так, чтобы оно указывало на локальный php-файл, который успешно получает ответ от recaptcha как «success» или «fail». В случае неудачи я использую заголовок php, чтобы отправить посетителя обратно на страницу, с которой он пришел, но в случае успеха я не могу понять следующий шаг. Каков наилучший способ взять мои данные POST и передать их в скрипт capture.php внешнего веб-сайта?

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Вы не даете нам многого, но с 2019 года я предполагаю, что вы хотите общаться с другими сайтами через API. По крайней мере, вы хотите вызвать конкретный сценарий, который, как вы знаете, существует и может принимать вызовы от вас (и, надеюсь, немного безопасен).

Вы должны сделать запрос на этот сайт "так же, как" браузер. Большинство серверов приходят с CURL, чтобы сделать запрос. В PHP есть функция с именем curl_exec(), проверяющая здесь

Если вы собираетесь в значительной степени полагаться на звонки на другие ресурсы за пределами вашего сайта, было бы разумнее позволить кому-то еще сделать тяжелую работу за вас и привлечь стороннюю библиотеку поставщиков. GuzzleHTTP doc - один из тех, что я использую, но не одобряю, так как тщательно проверен. Они в основном обертывают для вас curl и дают стандартную структуру ответа на запрос.

0 голосов
/ 14 января 2019

Как я понимаю вашу настоящую проблему

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

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

Перенаправление действия формы не решает проблему

изменил действие формы, указав на локальный php-файл, который успешно получает ответ от recaptcha как «success» или «fail». При «неудаче» я использую заголовок php, чтобы отправить посетителя обратно на страницу, с которой он пришел, но при «успехе» я не могу понять следующий шаг.

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

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

Рекомендуется использовать reCaptcha V3

Я настроил recaptcha v2

Я бы порекомендовал использовать Google reCaptcha V3 , который будет работать в фоновом режиме, не требуя взаимодействия с пользователем, и будет возвращать счет от 0 до 1, где к 1 это означает, что человек использует страницу В противном случае это автоматизированный инструмент.

Google цитата:

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

Важно

Включите reCaptcha V3 на всех страницах вашего сайта, чтобы Google мог узнать о пользователе и его поведении, чтобы дать вам более уверенную оценку, является ли он человеком или ботом. Помните, что если пользователь не запрашивает взаимодействие, это не влияет на работу пользователей на любой странице вашего сайта.

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

Пример ответа от Google API для проверки на стороне сервера reCaptcha V3 согласно Google docs :

{
  "success": true|false,      // whether this request was a valid reCAPTCHA token for your site
  "score": number             // the score for this request (0.0 - 1.0)
  "action": string            // the action name for this request (important to verify)
  "challenge_ts": timestamp,  // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
  "hostname": string,         // the hostname of the site where the reCAPTCHA was solved
  "error-codes": [...]        // optional
}

Дополнительная защита

Подделка межсайтовых запросов, более известная как CSRF

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

OWASP цитата:

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

Межсайтовый скриптинг, также известный как XSS

Описание атаки см. В описании атаки OWASP XSS , а затем перейдите к разделу OWASP Prevention Chaeta Sheat , чтобы узнать, как защититься от него. Еще раз, если вы используете фреймворк, у него уже должны быть инструменты для предотвращения атак XSS.

OWASP цитата:

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

Продолжать использовать reCaptcha V2

Так что, если вы хотите продолжить использовать reCaptcha V2, просто позвольте ему работать как обычно:

  • блокирование пользователем нажатия кнопки отправки формы, пока она не пройдет все испытания Google.
  • указание формы на оригинальный скрипт php, который обрабатывает отправку формы и проверяет reCaptcha V2 на стороне сервера.

Пример ответа от Google API в соответствии с Документами Google :

{
  "success": true|false,
  "challenge_ts": timestamp,  // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
  "hostname": string,         // the hostname of the site where the reCAPTCHA was solved
  "error-codes": [...]        // optional
}

Имейте в виду, что reCaptcha V2 можно обойти, просто поищите в Google recaptcha v2 bypass, чтобы узнать, сколько сервисов для этого существует, что позволит злоумышленникам продолжать выполнять скрипт автоматически.

...