HTTP Local Proxy Функции для работы с socks4/5 на C
Янв 20

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

  1. На страницу в форму добавляем скрытое поле с определенным именем и ID
  2. средствами php генерируем уникальный ключ, генерируем JS скрипт который будет присваивать значение этого ключа скрытому полю по его ID
  3. Производим абфускацию JS кода, и выполняем его в браузере пользователя.
    (Абфускация кода нужна для того чтобы ключ не выводился на странице в открытом виде, а получался в результате выполнения скрипта)
  4. При субмите формы проверяем значение скрытого поля, и сгенерированного ключ, если значения совпадают значит все OK.

Такая схема не требует от пользователя никаких действий, у него всего лиш должен быть включен JavaScript, а вот спамерам жизнь затруднит. Конечно значение ключа можно выдрать из DOM и пройти проверку, НО для этого необходимо выполнить JS код средствами спамера , т.к. это не линейная задача (не для PHP) 90% быдло-кодеров с этим не справятся;)

Скриптов по обфускации JS довольно много (я использовал Dean Edwards JavaScript Packer) поэтому задача свелась к написанию функции генератора кода и функции проверки ключа.

array gen_js_key()

Функция для генерация ключа и кода.  Возвращает ассоциативный массив, значение ключа сохраняет в $_SESSION['js_key']

Ключи возврашаемого массива:

[js_key] - униальный ключ

[input] - скрытое поле с уникальным именем и id

[js] - абфусцированный JS код для ыполнения на стороне юзера

bool check_js_key()

Проеряет ключ. Нужно вызывать после субмита формы.

Пимер использования:

<? 
	include('JavaScriptCaptcha.php');
 
	if(!empty($_POST['knopka']))
	{
		if(check_js_key())
			echo 'вы ввели <b>'.htmlspecialchars($_POST['txt']).'</b><br>';
		else 
			echo 'Ключ не подходит<br>';
	}
 
?>
<div id="testjs">
	<h1><b>JavaScript отключен! включите..</b></h1>
</div>
<body OnLoad="JavaScript:window.document.getElementById('testjs').style.display = 'none'">
<form method=post>
	<input type=text name=txt>
<?
	$r = gen_js_key();
	echo $r['input'];
?>
<input type=submit name=knopka>
</form>
<script type="text/javascript">
	<?=$r['js']?>
</script>

Скачать JScaptcha.rar v1.1

В архиве 3и файла:
class.JavaScriptPacker.php – класс обйускации JS
JavaScriptCaptcha.php – файл с необходимыми функциями для генерации и проверки кода
Index.php – пример использования


written by admin \\ tags: , , ,


4 Responses to “Альтернатива капчи средствами JavaScript”

  1. 1. олнг Says:

    прикольно

  2. 2. Luki Says:

    Но не во всех браузерах Java Script включен )

  3. 3. Ярик Says:

    Спасибо большое. Установил, пока что спама не видно

  4. 4. Wet Says:

    По статистике только у 1-5% клиентов отключен JavaScript. Да и не факт, что большая их часть настоящие пользователи, а не боты. В целом идея хорошая. Надо будет попробовать ее реализовать у себя. Спасибо.

Leave a Reply

JSantispam

В Вашем браузере отключена поддержка JavaScript! Для корректной работы Вам необходимо включить поддержку JavaScript и обновить данную страницу.