Защита от спама без капчи

Статус
В этой теме нельзя размещать новые ответы.

kode

never knows best
Защита от спама без капчи

Вопрос, насколько жизнеспособна такая схема (выложу в коде:

ВНИМАНИЕ ЭТО ЛИШЬ КОНЦЕПТ-ПРИМЕР написанный на коленке, УСПОКОЙТЕ СВОЁ ЗАНУДСТВО

PHP:
<?php

class Form_Guard {
	private $formMap;
	private $seed;
	private $key;


	public function __construct($seed=null){
		$this->formMap = $formMap;
		$this->seed = (!$seed)?$this->generateSeed():$this->getSeed($seed);

		if(!$this->seed){
			throw new Exception("Invalid form data!");
		}
	}

	public function encodeName($field){
		return base64_encode(mcrypt_encrypt(MCRYPT_3DES, $this->key, $field, MCRYPT_ECB));
	}
	
	public function decodeName($field){
		return mcrypt_decrypt(MCRYPT_3DES, $this->key, base64_decode($field),MCRYPT_ECB);
	}
	
	public function decodeForm($gpc=null){
		if(!$gpc){
			$gpc = $_POST;
		}
		
		if(isset($gpc['s'])){
			unset($gpc['s']);
		}
		
		$return = array();
		
		foreach ($gpc as $key=>$value){
			$decoded_key = $this->decodeName($key);
			$return[$decoded_key] = $value;
		}
		
		
		return $return;
	}

	public function printSeed(){
		echo "<input type=\"hidden\" name=\"s\" value=\"{$this->seed}\"/>";
	}

	protected function generateSeed($formkey=""){
		$seed = md5(microtime(true).$_SERVER['HTTP_HOST']);
		$this->key = md5(mt_rand(0,10000)+time());
		$this->addSeed($seed,$key,750); //750 - 15 минут
		return $seed;
	}

	protected function addSeed($seed, $key, $timeout){
		$db = Registry('db');
		$db->insert('form_guard',array('seed'=>$seed,'key'=>$key, 'expires'=>now()+$timeout));

		return true;
	}

	protected function getSeed($seed){
		$db = Registry('db');
		$result = $db->selectOne('form_guard',array('seed'=>$seed,'expires'=>array('<',now())));

		if($result){
			$this->key = $result['key'];
		}
		
		return (empty($result))?false:$seed;
	}

	protected function deleteSeed($seed){
		$db = Registry('db');

		$db->delete('form_guard',array('seed'=>$seed));

		return true;
	}


}

$smarty->assign('gLoginForm',new Form_Guard($_POST['s']));

?>

<form action="" method="post">
{$gRegisterForm->printSeed()}

<input type="text" name="{$gRegisterForm->encodeName('login')}"/>
<input type="text" name="{$gRegisterForm->encodeName('password')}"/>
</form>
 

StUV

Rotaredom
из данного примера не очень ясен принцип защиты именно "от спама"... - можно в двух словах без кода ?..
 

kode

never knows best
просто я подумал - большинство ботов посылают напрямую запрос используюя статичные названия полей - что будет если называния полей будут закодированны?
 

kruglov

Новичок
Это способ.

Только боты, конечно, все-таки в своей массе анализируют форму.
 

StUV

Rotaredom
прикольный способ
только... рефреш страницы с формой до поста обновляет кодированные имена полей - так что именно защиты от спама - нет

в случае с капчей - рефреш не помогает - все-равно нужен какой-то "интеллект" (в зависимости от сложности капчи =))
 

kode

never knows best
Автор оригинала: StUV
прикольный способ
только... рефреш страницы с формой до поста обновляет кодированные имена полей - так что именно защиты от спама - нет

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


просто капча иногда напрягает самого человека (например на некоторых имаджбордах (и не только) нужно вводить капчу для поста)

Это способ.

Только боты, конечно, все-таки в своей массе анализируют форму.
Дык им надо как можно сильнее усложнить этот процесс :) Думаю много ботов на таком зафейлит :rolleyes:
 

Фанат

oncle terrible
Команда форума
нестандартные имена полей, тем не менее, помогают.
не от всего - но помогают
 

vovanium

Новичок
нестандартные имена полей, тем не менее, помогают.
Да, и в принципе не обязательно для этого mcrypt использовать.
Сам применяю похожую вещь для антиспама, которая уже 2 года успешно работает на сервисе гостевух.
Еще кроме шифрования основных полей, я добавляю поля-ловушки со стандартными названиями которые находятся в форме, но скрыты с помощью CSS, т.е. чел их не видит, а боты заполняют ;)
Плюс основные поля кроме того что у них имена шифруются, они еще и дублируются и дубликаты прячутся в случайном порядке (это используется для того чтобы нельзя было заполнять по номеру поля в форме), потом проверяется, если два одинаковых поля заполнены - значит бот.
 

Angerslave

Новичок
Гы, самому недавно такая идея в голову приходила. Как дополнительная мера защиты сойдёт, но уповать только на это глупо, имхо.
vovanium
И как, есть какие-то цифры? Ну там, поток спама упал в 10 раз, юзабельность формы повысилась раза в 2 с капчёй и т.д.?
 

vovanium

Новичок
Angerslave
Если интересно, делал мониторинг который фиксировал весь поток сообщений, чтобы оценить работоспособность.
Так вот из всех сообщений приходящих на сервис, всего 2% это нормальные сообщения, присланные юзерами, остальное спам.
Что касается удобства, конечно на порядок удобнее, т.к. это "прозрачно" для юзера. Особенно для книг с постоянной аудиторией. К примеру книги футбольных болельщиков, обмениваются сообщениями по ходу матчей, может посчитаешь после какого раза ты задолбаешься вбивать капчу? :)
 

cDLEON

Онанист РНРСlub
Со спамом нужно бароться на уровне законодательства :(
А то уже совсем обнаглели :(
Не было бы спамеров, не было бы и каптчей.
А такая защита, которую указал ваваниум обходится оч. просто.
Хватает лишний раз загрузить страницу+ксс файлы+ и после этого не заполнять скрытые поля. Немного труднее получиться с яваскриптом- но у некоторых клиентов он тоже может быть отключён - тоже не выход...КОроче кроме каптчи ни чего не спасёт :(
 

Angerslave

Новичок
cDLEON
Капча тоже не спасает, так что между капчёй и скрытыми полями + перемешкой имён я бы выбрал последнее, так как не заставляет пользователя совершать лишние действия.
 

vovanium

Новичок
cDLEON
Хватает лишний раз загрузить страницу+ксс файлы+ и после этого не заполнять скрытые поля
Вообще-то ты не понял, по сути форма меняется каждый раз, так же как и CSS, так что там значительно сложнее.
Понятное дело что при желании можно обойти, но тут уже вопрос в затрате сил, проще что-то другое заспамить.
Тем более что спамят в основном автоспамилки.
Тут также как и со взломом, взломать можно всё, главное чтобы затраты на взлом были меньше, чем получаемая выгода от взлома ;)
А капча тоже не спасет, уже есть сервисы где народу деньги платят за ввод капчей. А вот как задалбывает капча обычных юзеров...
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху