[iichan.hk] automatic check for StormWall AntiDDoS protection.
See original GitHub issueВаш запрос на улучшение функционала связан с проблемой?
Да.
В последнее время на Ычане постоянно активен антиддос-экран, который спустя каждые несколько (десятков?) минут требует проверку, чтобы обновить печеньки. Получая проверочную заглушку при обновлении постов, куклоскрипт выдаёт результат как errCorruptData
.
Вроде как при наличии активного логина в гугле или ещё при каких-то условиях проверка проходится полностью автоматом, показывая галочку, но не перезагружая страницу с заглушкой (у меня так в браузере с куклой). Остаётся добавить ссылку или айфрейм на любой урл сайта, загрузить его и закрыть.
При отсутствии нужных условий требует проходить рекапчу и отмечать на фотках автобусы с мотоциклами, после успеха перезагружает само (у меня так в другом браузере без куклы).
Опишите ваше решение, которое вы хотели бы увидеть в реализаци
Вероятно, имеет смысл сделать это отключаемой настройкой, возможно на 3 варианта:
- Отключено.
- В баннере в углу, который пишет про сломанные данные, при обнаружении в ответе известных элементов заглушки писать предложение пройти проверку на любой странице, и ссылку на что-нибудь, например просто
/
(главную страницу сайта). - Добавлять айфрейм например с
/robots.txt
и убирать через десяток секунд полностью автоматически.
Для себя я решил вопрос так (вариант 3 по сути):
function ajaxLoad(url, returnForm = true, useCache = false) {
return AjaxCache.runCachedAjax(url, useCache).then(xhr => {
var el, text = xhr.responseText;
if (text.includes('</html>')) {
el = returnForm ? $q(aib.qDForm, $DOM(text)) : $DOM(text);
}
// вставка изменений отсюда:
if (!el && text.includes('<script src="https://static.stormwall.pro/')) {
// console.log('Got response:\n' + text);
setTimeout(ajaxLoadAntiDDoSCheck, 3000);
} else {
ajaxLoadAntiDDoSCheckClose();
}
// досюда;
return el ? el : CancelablePromise.reject(new AjaxError(0, Lng.errCorruptData[lang]));
}, err => err.code === 304 ? null : CancelablePromise.reject(err));
}
// далее своё содержимое:
const antiDDoSCheckElementID = 'de-check-antiDDoS';
function ajaxLoadAntiDDoSCheckClose() {
var el = $id(antiDDoSCheckElementID);
if (el) {
console.log((el.src || el.href) + ' closed.');
el.remove();
}
}
function ajaxLoadAntiDDoSCheck() {
var useIFrame = true;
var checkPath = '/#' + (+new Date) + '#' + new Date;
var a = $id(antiDDoSCheckElementID);
if (!a) {
var container = $id('de-thread-buttons') || $q('.de-thread-buttons') || document.body;
if (useIFrame) {
a = document.createElement('iframe');
a.width = 500;
a.height = 500;
} else {
a = document.createElement('a');
a.target = '_blank';
}
a.title = a.id = antiDDoSCheckElementID;
container.appendChild(a);
}
if (a) {
console.log(checkPath + ' opened for antiDDoS check.');
if (useIFrame) {
a.src = checkPath;
} else {
a.href = checkPath;
a.click();
}
}
}
Может быть пригодится, хотя код довольно-таки отсебятен, да ещё и под старый форк, да и в прошлый раз мой пул-реквест практически целиком выкинули, позаимствовав лишь идею.
Вот сэмпл странички-заглушки на всякий случай, с заменой ключей на дутые строки:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="https://static.stormwall.pro/captcha.css">
</head>
<body>
<!-- Header -->
<div class="header">
<div id="errorCode" class="error-code"></div>
</div>
<!-- Content -->
<div class="content">
<div id="validation-frame" class="infoblock action-description invisible">
<img class="loader" src="https://static.stormwall.pro/ajax-loader.gif" />
</div>
<div id="successful-frame" class="infoblock action-description invisible">
<img src="https://static.stormwall.pro/ok-icon-128.png" />
</div>
<div id="youshellnotpass-frame" class="infoblock action-description invisible">
<form id="recaptcha2" class="captcha-container" action="" method="POST">
<div class="captcha">
<div class="left-col">
<p>Your browser cannot be verified automatically, please confirm you are not a robot.</p>
<div class="g-recaptcha" data-sitekey="DUMMY_SITEKEY" data-callback="recaptcha2CB"></div>
<input type="hidden" name="swp_sessionKey" value="DUMMY_SESSIONKEY">
</div>
<div class="right-col">
<img src="https://static.stormwall.pro/error-icon-128.png" />
<p id="redirecting"></p>
</div>
</div>
</form>
</div>
</div>
<!-- Scripting -->
<script>
var recaptcha3key = 'DUMMY_RECAPTCHA3KEY';
var sessionKey = 'DUMMY_SESSIONKEY';
</script>
<script src="https://static.stormwall.pro/jquery-3.2.1.min.js"></script>
<script id="recaptcha3-source" src="https://www.google.com/recaptcha/api.js?render=DUMMY_RECAPTCHA3KEY"></script>
<script src="https://static.stormwall.pro/captcha1.1.js"></script>
</body>
</html>
P.S. Вместо /robots.txt
можно с тем же успехом тыкать /favicon.ico
, с тем отличием, что если он таки покажется сам собой, то не будет пугать пользователя.
P.S.2. Сегодня запрос /robots.txt
перестал помогать, обычные страницы сайта помогают (например, главная), иконку не пробовал. Поправил свой код выше.
Issue Analytics
- State:
- Created 3 years ago
- Comments:12 (12 by maintainers)
@SthephanShinkufag Теперь всё работает, насколько я могу видеть. Ещё работает например сначала ввод капчи, потом удаление токена, потом отправка поста. Иногда я получал ответ, что капча неправильная (в /d/ она перечёркнутая и буквы можно понять не так), но скорее всего скрипт в этом не виноват.
Насчёт вызова гуглокапчи, я вообще давно её там не видел, и может быть она теперь не появляется. Или это зависит (авто?)настройки тяжести защиты штормвола под ДДОС-нагрузками. Я не очень в курсе, как он работает.
Исправлено, проверяйте.