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

Форум PHP

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

 

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

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

тема: Реализация системы "антифлуд" в PHP с использованием MySQL

Сообщения:  [1-10]    [11-20]  [21-24] 

 
 автор: Osipov   (24.06.2007 в 14:07)   письмо автору
 
   для: Inque   (21.05.2007 в 10:45)
 

Cookeis ничего не дают, я например, кода пишу ботов никогда не держу ненужные Cookies.

А поступал я вот как для антифлуда: у меня есть лимит --- пятьдесят модификационных действий в 15 минут с одного IP и 150 модификаций в 30 минут из одной подсети (храню модификации в таблице MySQL), как только лимит превышен, если это с одного IP, то полностью баню его (при этом если в одной подсети более четырёх забаненных IP --- баниться подсеть, об этом позже), а все действия отменяю (у меня был хороший механизм для отмены модификаций). Затем, когда просматриваю базу забаненых пользователей, смотрю, действительно ли он флудер, если произошла ошибка, то извиняюсь и возвращаю всё обратно.

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

И ещё обязательно забаньте сразу все IP всех проксей, какие сможете найти в интернете.

Ну, а если вам нужно всего лишь сдержать, то можете установить таймаут на модификации (например, не более одной в пятнадцать секунд, не более пятнадцати в 15 минут с одного IP, я думаю, это будет вполне разумно, однако, когда будет много посетителей, это число нужно увеличить, чтобы при попадании двух пользователей с одного IP не было лишних недоразумений)

Кроме того на большинство форм я поставил картинку, защищающую от ботов.

   
 
 автор: Trianon   (24.06.2007 в 03:08)   письмо автору
 
   для: cheops   (22.06.2007 в 12:06)
 

>Если включены - экранировать ничего не нужно - об этом заботиться сам сервер,
Это утверждение как минимум неполное.

Если данные, помещаемые в запрос, взялись не из GET POST COOKIE или REQUEST ,
а из любого другого источника - например,
из загруженного пользователем файла
из файла находящегося на сервере, или полученного по FTP
из сокета, curl , imap и других методов получения чужих данных
и так далее!!!!
=-то экранирование потребуется.

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

Именно поэтому этот кошмар (magic quotes) из php6 выкинут.

   
 
 автор: cheops   (22.06.2007 в 12:06)   письмо автору
 
   для: Inque   (21.06.2007 в 12:09)
 

Данная конструкция определяет включены или отключены магические кавычки - автоматическое экранирование спец-символов в POST-, GET-, COOKIE- данных - они могут быть включены на сервере, а могут быть отключены. Если включены - экранировать ничего не нужно - об этом заботиться сам сервер, если отключены - нужно. Конструкция get_magic_quotes_gpc() и позволяет добиться универсальности при обработке текстовых значений, которые заключаются в кавычки перед помещением в базу данных. Все числовые значения, которые в кавычки, как правило, не помещаются проверяются либо при помощи спец-функций PHP (например, intval()), либо при помощи регулярных выражений.

PS Вы можете ориентироваться на исходные коды этого форума в разделе downloads (все коды тщательно комментированы на русском языке) - в нём защита от SQL-инъекций вылизана.
PPS Функции stripslashes() вообще не должна использоваться в обработке текста перед помещением в базу данных.

   
 
 автор: Trianon   (22.06.2007 в 01:40)   письмо автору
 
   для: Inque   (21.06.2007 в 12:09)
 

Вот в этой теме я как-то сделал попытку раскрыть суть метаморфоза строк на пути от формы ввода к браузеру через БД.
Возможно, Вас заинтересует.
http://softtime.ru/forum/read.php?id_forum=3&id_theme=14355

   
 
 автор: Inque   (21.06.2007 в 12:09)   письмо автору
 
   для: cheops   (21.06.2007 в 10:53)
 


if (!get_magic_quotes_gpc()) {...}

Что проверяет данная конструкция? Впервые такое вижу. И еще, нельзя ли просто этот код впихнуть в мою функцию? Я стремлюсь к тому, чтобы сделать что-то универсальное и не писать определенную последовательность фильтрации каждый раз, когда я загоняю данные в бд или вытаскиваю из нее что-то. Вобщем, я понял, что делаю что-то не так, а по сему прошу, будьте добры, напишите, чем бы вы фильтровали все данные на входе в БД и чем бы на выходе преобразовывали в нормальное представление. Это форум, очень важно, чтобы вероятность дыры в инъекциях и не только сводилась к минимуму.

   
 
 автор: cheops   (21.06.2007 в 10:53)   письмо автору
 
   для: Inque   (20.06.2007 в 18:23)
 

Дело в том, что stripslashes() не решает проблему кавычек и нарушения синтаксиса... если вы хотите защититься от SQL-инъекции лучше использовать конструкцию
<?php
  
if (!get_magic_quotes_gpc())
  {
    
$some_string mysql_escape_string($some_string);
  }
?>

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

   
 
 автор: Inque   (20.06.2007 в 18:23)   письмо автору
 
   для: Trianon   (18.06.2007 в 10:59)
 


function get_safe_string ($some_string) { 
      $safe_string = trim($some_string);   // Удаляем пробельные символы 
      $safe_string = stripslashes($safe_string);   // Удаляем обратные слеши 
      $safe_string = htmlspecialchars($safe_string, ENT_QUOTES);   // Конвертируем спецсимволы в строке в HTML-представление. 
      
      return $safe_string; 
}


Так проблема решена? Меня больше волнует то, надо ли эту строку прогонять через данный фильтр - строка будет использована для запросов в БД.

   
 
 автор: Trianon   (18.06.2007 в 10:59)   письмо автору
 
   для: Inque   (17.06.2007 в 13:53)
 

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

И вроде как комментарии стоят.... Значит Вы знаете, что делаете. Тогда почему опять такой компот?

См. задачу 21. В разделе "задачи".

   
 
 автор: Inque   (17.06.2007 в 13:53)   письмо автору
 
   для: Trianon   (17.06.2007 в 02:27)
 

Спасибо. Я потом по этой строке в базе буду искать. Мне надо будет ее обрабатывать вот этим?


function get_safe_string ($some_string) {
      $safe_string = trim($some_string);   // Удаляем пробельные символы
      $safe_string = htmlspecialchars($safe_string, ENT_QUOTES);   // Конвертируем спецсимволы в строке в HTML-представление.
      $safe_string = stripslashes($safe_string);   // Удаляем обратные слеши

      return $safe_string;
}

   
 
 автор: Trianon   (17.06.2007 в 02:27)   письмо автору
 
   для: Inque   (17.06.2007 в 00:05)
 

echo $_SERVER['QUERY_STRING'];

[поправлено модератором]

   

Сообщения:  [1-10]    [11-20]  [21-24] 

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

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