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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: защита от спама и флуда при помощи транслита)
 
 автор: tricket   (02.08.2007 в 00:01)   письмо автору
 
 

В общем ситуация такая у меня на форуме много похожих тем от ламеров:
"помогите", "help", "напомощь". И от спамеров "продаём", "пластиковые окна"....
Ладно спамеры с ними справимся) машины как не как... а вот русские люди порожают своей находчивостью, и когда видят сообщение форума "тема 'помогите' уже была. пользуйтесь поиском". и нет что вы думайте они идут в поиск? как бы не так. они меняют букву кирилицы "o" цифрой "0" или английской буквой!!!!!! ёлы палы русские люди)))
Ладно теперь решил написать скрипт-экстрасенс, который автоматически заменить цифру 0 и англ букву o на советскую... Но не знаю с чего даже начать. ладно с кодом справлюсь. а вот алгоритм в голову вообще не приходит не какой... у кого какие мысли как это сделать? нужно же как то узнать что слово русское. и именно в нём замену сделать. плюс регулярки тут чувствуются. что отнимают и без того маленькие серверные ресурсы. В общем такие дела..
ЗЫ красочно написал) вечером муза приходит)

   
 
 автор: Disable   (02.08.2007 в 00:32)   письмо автору
 
   для: tricket   (02.08.2007 в 00:01)
 

такое уже реализовано в книге "Головоломки на PHP для хакера" :)

   
 
 автор: Proger   (02.08.2007 в 00:53)   письмо автору
 
   для: Disable   (02.08.2007 в 00:32)
 

Какая статья? Чот не видел!

   
 
 автор: cheops   (02.08.2007 в 09:53)   письмо автору
 
   для: Proger   (02.08.2007 в 00:53)
 

Имеется в виду книга http://www.softtime.ru/security/?id_article=93.

   
 
 автор: AxoN   (02.08.2007 в 00:53)   письмо автору
 
   для: Disable   (02.08.2007 в 00:32)
 

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

   
 
 автор: futurer   (02.08.2007 в 01:16)   письмо автору
 
   для: tricket   (02.08.2007 в 00:01)
 

Думаю, что реализация не такая и сложная.
1. Вначале создаёшь монолит текста. (удаляешь все ! @ # $ % ^ & и т.д.)
str_replace("!","",$str);

2. Приводишь весь текст к нижнему регистру.
$str=strtolower($str);

3. Заменяешь все английские буквы на русские, на которые они похожи.
т.е. w на ш и т.д.
4. Ищешь на совпадение недопустимым словам
if(stristr($str,"памагите")){пошли все нафиг}

   
 
 автор: Unkind   (02.08.2007 в 02:09)   письмо автору
 
   для: futurer   (02.08.2007 в 01:16)
 

Если Вы привели текст к нижнему регистру, то использовать stristr() излишне.

По теме: думаю, лучше переименовывать темы, предупреждать и в крайнем случае банить. С учетом того, что Вы это внесли в правила, конечно. А искать техническое решение я бы не стал. Если не получилось "помогите", он найдет такое название, которое пройдет.

   
 
 автор: zxcAq   (02.08.2007 в 02:12)   письмо автору
 
   для: Unkind   (02.08.2007 в 02:09)
 

Действительно) Можно же просто дописать символ в конце слова ПОМОГИТЕ)) например "ПомогитеНах :)" Тоже думаю, что это бесполезно.

   
 
 автор: deman-b   (02.08.2007 в 02:31)   письмо автору
 
   для: tricket   (02.08.2007 в 00:01)
 

можно пользоватся фуекцией симилар_текст и в зависимости от процента схожести выдавать предупреждение... но это все фигня... на форуме темы - не файлы и одинаковые названия имеют место быть....

   
 
 автор: deman-b   (02.08.2007 в 02:39)   письмо автору
 
   для: deman-b   (02.08.2007 в 02:31)
 

а если форум посещают дебилы - то для них можно не пожелеть места на странице добавления топика и поместить обЪявление: Пжалуфста называйте темы грамотно! отражая в ее названиии ее суть или чтонь-ть вроде того =))

   
 
 автор: Disable   (02.08.2007 в 03:54)   письмо автору
 
   для: deman-b   (02.08.2007 в 02:39)
 

такое 100% не поможет, примеров масса :)

2Proger->
статья ||.7.8 Защита имени пользователя от подделки.

   
 
 автор: cheops   (02.08.2007 в 09:52)   письмо автору
 
   для: tricket   (02.08.2007 в 00:01)
 

Можно отталкиваться от скрипта вида - адаптировав его под свои цели...
<?php
  
// Массив русских букв
  
$rus = array("А""а""В""Е""е""К""М""Н""О""о""Р",
               
"р""С""с""Т""Х""х""о");
  
// Массив латинских букв
  
$eng = array("A""a""B""E""e""K""M""H""O""o""P",
               
"p""C""c""T""X""x""0");
  
// Заменяем латинские буквы русскими
  
$text str_replace($eng$rus$text); 
  
// Далее проверка
?>

   
 
 автор: tricket   (02.08.2007 в 12:26)   письмо автору
 
   для: cheops   (02.08.2007 в 09:52)
 

хм а книжка интересная наверное - "Головоломки на PHP для хакера"
жаль что название дали такое... надо обязательно купить! в общем тут http://www.softtime.ru/security/code.zip. нашёл кое-что

<?php
  
// Выясняем, не создаётся ли новое имя для дискредитации
  // Возможны три ситуации, которые необходимо предотвратить:
  // 1. Вводится имя, полностью совпадающее с уже существующим
  // 2. Вводится уже существующий русское имя, в котором
  //    одна или несколько букв заменены на английские
  // 3. Вводится уже существующий английское имя, в котором
  //    одна или несколько букв заменены на русские
  // Массив русских букв
  
$rus = array("А""а""В""Е""е""К""М""Н""О""о""Р",
               
"р""С""с""Т""Х""х");
  
// Массив английских букв
  
$eng = array("A""a""B""E""e""K""M""H""O""o""P",
               
"p""C""c""T""X""x");
  
// Заменяем русские буквы английскими
  
$eng_author str_replace($rus$eng$author); 
  
// Заменяем английские буквы русскими
  
$rus_author str_replace($eng$rus$author); 
  
// Формируем SQL-запрос
  
$query "SELECT * FROM authors 
            WHERE name LIKE '
$author' OR
                  name LIKE '
$eng_author' OR
                  name LIKE '
$rus_author'";
  
$ath mysql_query($query);
  if(!
$ath) exit("Ошибка при регистрации нового посетителя");
  
// Если выборка содержит хотя бы одну запись - прекращаем
  // регистрацию нового посетителя
  
if(mysql_num_rows($ath)>0) exit("К сожалению, данное имя уже
                                   зарегистрировано.
                                   Попробуйте другое."
);
  
// Код регистрации нового посетителя...
?>

но! их способ не очень... это будет мускула нагружать сильно...

   
 
 автор: cheops   (02.08.2007 в 23:59)   письмо автору
 
   для: tricket   (02.08.2007 в 12:26)
 

Авторы зачастую не властны над называнием - это прерогатива отдела маркетинга.

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

   
 
 автор: Prihod   (03.08.2007 в 10:42)   письмо автору
 
   для: cheops   (02.08.2007 в 23:59)
 

Можно еще попробовать применить similar_text()

int similar_text ( string first, string second [, float &percent] )


This calculates the similarity between two strings as described in Oliver [1993]. Note that this implementation does not use a stack as in Oliver's pseudo code, but recursive calls which may or may not speed up the whole process. Note also that the complexity of this algorithm is O(N**3) where N is the length of the longest string.

By passing a reference as third argument, similar_text() will calculate the similarity in percent for you. It returns the number of matching chars in both strings.

   
 
 автор: Disable   (03.08.2007 в 12:06)   письмо автору
 
   для: Prihod   (03.08.2007 в 10:42)
 

xxx: чувак у нас на теологии учится, делает ребятам выпускные работы по 3к, единственная проблема - прога "антиплагиат", она имеет свою базу данных, и если хотяб 30% работы совпадает с работами сданными раньше - работа не сдана...
yyy: и как он её обходит ?)
xxx: тупо в ворде меняет русские "о" и "е" на английские, тото преподы удивляются, когда есть что-то знакомое, а прога показывает что работа написана с чистого листа =)

-------
Статья:
http://bash.org.ru/quote/390941

   
 
 автор: Binura   (03.08.2007 в 14:23)   письмо автору
 
   для: Disable   (03.08.2007 в 12:06)
 

=)) прикольно... а еслт тема будет "Помогите, BBcode не работает..." он и в англ. словах все заменит... какой смысл? потом еще труднее будет работать... о поиске тем, вообще можно будет забыть...
лучше сделай модераторскую и набери модераторов...

   
Rambler's Top100
вверх

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