Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как защить форум рнрBB?

Сообщения:  [1-6] 

 
 автор: Владимир55   (05.03.2006 в 11:57)   письмо автору
 
   для: technic611   (05.03.2006 в 04:47)
 

Теперь я повысил уровень защиты и количество спама обязательно уменьшится.

Большое спасибо за советы

   
 
 автор: technic611   (05.03.2006 в 04:47)   письмо автору
 
   для: Владимир55   (04.03.2006 в 22:37)
 

Да непоможет ставил я уже такую опцию, находится она в Правах доступа. Все равно будут регистрироваться и слать, пока хорошую защиту не сделать.

Например изменить action, пути
Можно генерировать картинки с кодом, хоят слышал что из спам боты их могут обходить.
Вот что я нашел на одном из форумов посвященных этой теме. Может поможет


Заголовок сообщения: PHP. Пишем защиту от регистраций ботов.

Итак, сегодня поговорим о защите своих сайтов/форумов/гостевых и т.д. от регистраций и постоянных реклам ботов.
Все, что нам понадобится, - php и прямые руки. Ну, и может быть еще какая-нибудь программа для рисования.
Писать защиту будем с использованием сессий. По-моему, это самый оптимальный вариант для небольших и средних проектов. Конечно, можно делать и с использованием базы данных, но этого мы делать не будем. Начнем...
Для начала напишем простой скрипт, который будет генерировать совершенно случайную надпись. Если вы хотите использовать только цифры, то решается все очень просто:
Код:


<?php 
$string 
mt_rand(10000,99999); // случайное число 
?> 

И все... А если буквы, то это тоже очень легко, просто немного больше кода: 
Код:
 
<?php 
$letters 
'abcdifghijklnmopqrstuvwxyz'// строка символов 
$chars = array(); 
$string ''
for (
$i=0;$i<strlen($letters);$i++) 

   
$chars[] = substr($letters,$i,1); // массив всех символов 

$length 5
for (
$i=0;$i<$length;$i++) 

   
$char mt_rand(0,count($chars)-1); // генерация случайного номера символа из массива 
   
$string .= $chars[$char]; // добавление случайного символа к строке 

?> 


В итоге, $string - это наша случайная строка. В общем, при ее формировании можно извращаться, насколько хватит фантазии. При желании можно добавить туда и цифры, и заглавные буквы, и специальные символы.
Идем дальше. Теперь напишем формочку с для отображения картинки и ввода строки. И с самого начала стартуем сессию и генерируем строку.
Код:


<?php 
session_start
(); // наша сессия 
$letters 'abcdifghijklnmopqrstuvwxyz'
$chars = array(); 
$string ''
for (
$i=0;$i<strlen($letters);$i++) 

   
$chars[] = substr($letters,$i,1); 

$length 5
for (
$i=0;$i<$length;$i++) 

   
$char mt_rand(0,count($chars)-1); 
   
$string .= $chars[$char]; 

$_SESSION['string'] = $string// передача случайной строки в сессию 
?> 
<form action="verify.php" method="post"> 
<img src="img.php" alt="Anti-bot"><br> 
<input type="text" name="userstring"><br> 
<input type="submit" name="verify" value=" send "> 
</form> 


А теперь приступаем к самому интересному - пишем код самой картинки, т.е. скрипт img.php.
Код:


<?php 
session_start
(); 
$img imagecreate(200,80); // создаем изображение размером 200х80 
$black imagecolorallocate($img,0,0,0); // определяем черный цвет 
$white imagecolorallocate($img,255,255,255); // белый цвет 
imagefill($img,0,0,$white); // заполняем изображение белым 
imagettftext($img,38,0,4,60,$black,'arial.ttf',$_SESSION['string']); // пишем строку из сессии черным цветом 
imagepng($img); // отдаем картинку в браузер 
imagedestroy($img); // удаляем ее из памяти 
header('Content-Type: image/png'); // даем знать браузеру, что это картинка png 
?> 

Это пример, самой простой картинки, которая напишет нашу случайную строку на белом фоне. Важно: тут я использовал шрифт arial.ttf, вместо стандартных, для этого нужен сам файл шрифта, который будет лежать в одной директории со скриптом и поддержка функции imagettftext в php. 
Но ведь есть боты, которым по силам прочитать такое, а мы этого не хотим, ведь так?  
Извращаемся дальше - создадим небольшой шум. 
Код:
 
<?php 
session_start
(); 
$img imagecreate(200,80); 
$black imagecolorallocate($img,0,0,0); 
$white imagecolorallocate($img,255,255,255); 
imagefill($img,0,0,$white); 
imagettftext($img,38,0,4,60,$black,'arial.ttf',$_SESSION['string']); 
$p 0
while (
$p<1000

   
$x mt_rand(1,199); // случайная координата пикселя шума по оси X 
   
$y mt_rand(1,79); // ось Y 
   
$pixel imagecolorat($img,$x,$y); // узнаем какой цвет используется на месте будущего пикселя шума 
   
$point = ($pixel == $black) ? $white $black// если был черный, красим пиксель белым, если белый - красим черным 
   
imagesetpixel($img,$x,$y,$point); // рисуем сам пиксель 
   
$p++; 

imagepng($img); 
imagedestroy($img); 
header('Content-Type: image/png'); 
?> 


Получились небольшие помехи на картинке, называемые шумом. Число в цикле можно увеличивать - только не перестарайтесь, чтобы не слишком загружать сервер и, конечно же, чтобы сама строка на картинке была видна.
Теперь сделаем разноцветный фон. Его можно нарисовать в любой программе для рисования, хотя бы даже в paint. А потом укажем в скрипте путь до этого изображения и применим как фон. Вот так:
Код:


<?php 
session_start
(); 
$img imagecreatefrompng('ourpicture.png'); // создаем изобажение из уже существующего в формате png 
$black imagecolorallocate($img,0,0,0); 
$white imagecolorallocate($img,255,255,255); 
imagettftext($img,38,0,4,60,$black,'arial.ttf',$_SESSION['string']); 
$p 0
while (
$p<1000

   
$x mt_rand(1,199); 
   
$y mt_rand(1,79); 
   
$pixel imagecolorat($img,$x,$y); 
   
$point = ($pixel == $black) ? $white $black
   
imagesetpixel($img,$x,$y,$point); 
   
$p++; 

imagepng($img); 
imagedestroy($img); 
header('Content-Type: image/png'); 
?> 


Получим картинку с надписью и шумом на нашем фоне. Замечу, что картинку я создавал в формате png, поэтому и функцию php использовал соответствующую - imagecreatefrompng. Для других форматов изображений есть и другие функции.
Все способы рисования защиты я показывать не буду - фантазируйте и создавайте сами. Просто на словах скажу, что можно еще нашу строку накладывать на саму себя, но с небольшим смещением, - опять же получится небольшое искажение. Или же каждый символ строки смещать по осям X и Y, даже окрашивать их в разные цвета. Можно выводить и какое-то математическое действие, как, например, сделано на нашем сайте при регистрации. Также можно писать случайное число прописью, что существенно усложнит жизнь ботам.
И, наконец, мы дошли до последнего скрипта - скрипта проверки введенной строки, verify.php.
Код:


<?php 
session_start
(); 
if (!empty(
$_POST['userstring'])) die('Вы ничего не написали!'); // проверяем введенную строку пользователем 
if ($_POST['userstring'] === $_SESSION['string']) echo 'Строка введена правильно.'// проверяем идентичность и даем ответ 
else echo 'Строка введена неправильно!'
?> 

   
 
 автор: SSgv   (05.03.2006 в 03:57)   письмо автору
 
   для: Владимир55   (04.03.2006 в 22:37)
 

Когда создаешь новый форум, то выбираешь, кто может там писать, все или пользователи, а пользователи это и есть зарегистрированные.

   
 
 автор: Владимир55   (04.03.2006 в 22:37)   письмо автору
 
   для: JIEXA   (04.03.2006 в 22:32)
 

Вот что это за опция?

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

Но ведь можно и вообще не регистрироваться, а писать прямо так! Вот как отключить эту возможность писать без регистрации?

   
 
 автор: JIEXA   (04.03.2006 в 22:32)   письмо автору
 
   для: Владимир55   (04.03.2006 в 22:20)
 

> Можно ли на движке этого типа сделать так, чтобы создание учетной записи было обязательным?

в админ панеле есть опции такая, где точно, не помню

> Такое возможно? Вероятно, через прокси?
через прокси 100%

   
 
 автор: Владимир55   (04.03.2006 в 22:20)   письмо автору
 
 

Какой-то настойчивый спамер попался - сыпет и сыпет одно и тоже объявление во все разделы. Сначала я терпеливо их удалял, потом стал ставить запрет на его адрес и тут увидел, что у каждого сообщения свой адрес!

Такое возможно? Вероятно, через прокси?

Сейчас собрал коллекцию запрещенных мною адресов, но спамеров это совершенно не смущает!

Слышал, что можно что-то сделать через куки. Если б я ещё знал, что это такое, то может бы и сделал...

И ещё.
Можно ли на движке этого типа сделать так, чтобы создание учетной записи было обязательным? А то многие не регистрируются вообще, пишут "Гость" или любой ник, и лепят, что попало...

   

Сообщения:  [1-6] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования