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

Форум PHP

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

 

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

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

тема: Защита от SQL-injection
 
 автор: Alexneo   (07.09.2005 в 22:14)   письмо автору
 
 

вот функция для обработки строк перед использованием строк в SQL-запросах. Есть ли недочеты?

function to_sql($str,$size)
{
  $str=trim($str);
  $str=substr($str,0,$size);
  $str=htmlspecialchars(stripslashes($str));
  $str=str_replace("'","'",$str);
  if(!get_magic_quotes_gpc())
  {
     $str=mysql_escape_string($str);
  }
  else
  {
     $str=$str;
  }
    return $str;
}

   
 
 автор: Евгений Петров   (07.09.2005 в 23:23)   письмо автору
 
   для: Alexneo   (07.09.2005 в 22:14)
 

Ну во первых советую пропускать через htmlSpecialChars после извлечения из БД, точнее перед выводом в браузер. Во вторых строки:
else
  {
     $str=$str;
  } 
не нужны абсолютно. Потом не очень мне нравится строка
$str=substr($str,0,$size);
Зачем обрезать данные пользователя. Лучше просто предупредить его чтобы он не вводил слишком длинные данные а если ввел, тогда сказать чтоб поменьше ввел.
Исходя из всего выше сказанного могу предложить тебе код который по моему мнению обеспечивает надежную защиту от SQL - инъекций.
<?
function to_sql($str)
{
  
$str=trim($str); // это скорее на защита а предусмотрительность
  
$str=str_replace("'","'",$str); // эту сроку можно впринципе и выкинуть
  
if(!get_magic_quotes_gpc())
     
$str=mysql_escape_string($str);
  return 
$str;
}
?> 

   
 
 автор: Seo   (07.09.2005 в 23:56)   письмо автору
 
   для: Евгений Петров   (07.09.2005 в 23:23)
 

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

<?
$str 
preg_match("/[a-zA-Zа-яА-Я0-9\-,.:;]*/i"$str);
?>

А будет еще лучше, если вы загляните на страничку:

http://softtime.ru/info/articlephp.php?id_article=35

   
Rambler's Top100
вверх

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