question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

[iichan.hk] automatic check for StormWall AntiDDoS protection.

See original GitHub issue

Ваш запрос на улучшение функционала связан с проблемой?

Да.

В последнее время на Ычане постоянно активен антиддос-экран, который спустя каждые несколько (десятков?) минут требует проверку, чтобы обновить печеньки. Получая проверочную заглушку при обновлении постов, куклоскрипт выдаёт результат как errCorruptData.

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

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

Опишите ваше решение, которое вы хотели бы увидеть в реализаци

Вероятно, имеет смысл сделать это отключаемой настройкой, возможно на 3 варианта:

  1. Отключено.
  2. В баннере в углу, который пишет про сломанные данные, при обнаружении в ответе известных элементов заглушки писать предложение пройти проверку на любой странице, и ссылку на что-нибудь, например просто / (главную страницу сайта).
  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:closed
  • Created 3 years ago
  • Comments:12 (12 by maintainers)

github_iconTop GitHub Comments

1reaction
f2dcommented, Dec 11, 2020

@SthephanShinkufag Теперь всё работает, насколько я могу видеть. Ещё работает например сначала ввод капчи, потом удаление токена, потом отправка поста. Иногда я получал ответ, что капча неправильная (в /d/ она перечёркнутая и буквы можно понять не так), но скорее всего скрипт в этом не виноват.

Насчёт вызова гуглокапчи, я вообще давно её там не видел, и может быть она теперь не появляется. Или это зависит (авто?)настройки тяжести защиты штормвола под ДДОС-нагрузками. Я не очень в курсе, как он работает.

1reaction
SthephanShinkufagcommented, Dec 11, 2020

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

Обновление капчи без токена не работает, показывает иконку битой картинки на месте капчи.

Исправлено, проверяйте.

Read more comments on GitHub >

github_iconTop Results From Across the Web

StormWall DDoS Protection and Mitigation | Anti-DDoS service
Powerful servers with complete DDoS protection. L3-L7 protection against all DDoS attack vectors. It takes 10 minutes to connect | StormWall.
Read more >
DDoS Protection | Instant Activation | 3-Second SLA
Mitigate the largest network and application layer DDoS attacks in under 3 seconds without interfering with your legitimate traffic flows.
Read more >
Arbor DDoS mitigation
Best-in-class Hybrid DDoS Protection. Layered, Automated DDoS Attack Protection: Industry best practices recommend a comprehensive layered, approach, backed by ...
Read more >
Cisco Secure DDoS Protection
On-demand, always-on, or hybrid? We give organizations the widest security coverage from today's DDoS attacks.
Read more >
Top 10 StormWall Pro Alternatives & Competitors
Read reviews and product information about Webroot DNS Protection, Imperva App Protect ... DefensePro provides automated DDoS protection from fast-moving, ...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found