Как обойти Invisible reCAPTCHA при помощи капча-сервиса
Не так давно Google дополнил функционал капчи reCAPTCHA v2 невидимой капчей.
Её образец можно увидеть по ссылке:
https://www.google.com/recaptcha/api2/demo?invisible=true
Теперь пользователю зачастую даже не нужно нажимать галочку “я не робот”, сама капча появляется в невидимом слое, дополнительно смещённым на 10 000 px выше начала страницы и не видна пользователю. Прохождение капчи запускается только в момент отправки формы. Если куки пользователя хорошие, то он даже не заметит, что капча была. Если куки не очень хорошие, то при отправке формы он тут же получит по центру экрана стандартную reCAPTCHA, где нужно выбрать несколько изображений.
В целом, принцип работы reCAPTCHA совершенно не изменился, но некоторые заказчики сервиса rucaptcha.com столкнулись с проблемами. Если в своей работе вы формируете POST-запрос содержащий g-recaptcha-responce
к сайту, на котором установлена капча, то Вы даже не заметите изминений. Проблема возникла у тех заказчиков, которые используют движок браузеров для автоматизации каких-либо действий, например silenium.
Что делать, чтобы в браузере можно было пройти Invisible reCAPTCHA?
- Вырежьте из тела документа div, содержащий саму reCAPTCHA:
<div><div style="visibility: hidden; position: absolute; width:100%; top: -10000px; left: 0px; right: 0px; transition: visibility 0s linear 0.3s, opacity 0.3s linear; opacity: 0;">
<div style="width: 100%; height: 100%; position: fixed; top: 0px; left: 0px; z-index: 2000000000; background-color: #fff; opacity: 0.5; filter: alpha(opacity=50)">
</div>
<div style="margin: 0 auto; top: 0px; left: 0px; right: 0px; position: absolute; border: 1px solid #ccc; z-index: 2000000000; background-color: #fff; overflow: hidden;">
<iframe src="https://www.google.com/recaptcha/api2/bframe?hl=en&v=r20170213115309&k=6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs#zglq3yifgkmj" title="recaptcha challenge" style="width: 100%; height: 100%;" scrolling="no" name="zglq3yifgkmj" frameborder="0"></iframe>
</div>
</div>
</div>
- Вырежьте полностью блок
<div><div class=""><!-- BEGIN: reCAPTCHA implementation example. --><div id="recaptcha-demo" class="g-recaptcha" data-sitekey="6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs" data-callback="onSuccess" data-bind="recaptcha-demo-submit"><div class="grecaptcha-badge" style="width: 256px; height: 60px; transition: right 0.3s ease 0s; position: fixed; bottom: 14px; right: -186px; box-shadow: 0px 0px 5px gray;"><div class="grecaptcha-logo"><iframe src="https://www.google.com/recaptcha/api2/anchor?k=6LfP0CITAAAAAHq9FOgCo7v_fb0-pmmH9VW3ziFs&co=aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbTo0NDM.&hl=en&v=r20170213115309&size=invisible&cb=uror1hlow5a" title="recaptcha widget" scrolling="no" name="undefined" width="256" height="60" frameborder="0"></iframe></div><div class="grecaptcha-error"></div><textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response" style="width: 250px; height: 40px; border: 1px solid #c1c1c1; margin: 10px 25px; padding: 0px; resize: none; display: none; "></textarea></div></div><script>
var onSuccess = function(response) {
var errorDivs = document.getElementsByClassName("recaptcha-error");
if (errorDivs.length) {
errorDivs[0].className = "";
}
var errorMsgs = document.getElementsByClassName("recaptcha-error-message");
if (errorMsgs.length) {
errorMsgs[0].parentNode.removeChild(errorMsgs[0]);
}
document.getElementById("recaptcha-demo-form").submit();};</script><!-- Optional noscript fallback. --><!-- END: reCAPTCHA implementation example. --></div>
</div>
- На место поставьте следующий код:
<div><input type="submit">
<textarea name="g-recaptcha-response">%g-recaptcha-response%</textarea>
</div>
В котором %g-recaptcha-response% код, который вы получили от 2captcha.com
- У вас появится кнопка “Submit Query”, при нажатии на неё вы отправите на сайт, где установлена капча все данные формы и
g-recaptcha-response
.
Вот таким нехитрым образом мы превращаем Invisible reCAPTCHA в обычную reCAPTCHA v2 и проходим её.
А те разработчики, кто не эмулирует браузер, а сразу шлёт POST-запросы, они даже не заметят, если рекапча поменяется на невидимую.