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

Форум MySQL

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

 

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

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

тема: sql-инъекция
 
 автор: Jaroslav   (16.08.2008 в 14:40)   письмо автору
 
 

Здравствуйте.

Подскажите, пожалуйста, что такое "sql-инъекция" и как с ней бороться?? Встречаю не 1-й раз, но что это такое - не знаю. Жалуются, что вредоносные коды встраиваются в картинки... Как этого можно избежать?

С уважением,
Ярослав.

  Ответить  
 
 автор: SportSoft   (16.08.2008 в 14:57)   письмо автору
 
   для: Jaroslav   (16.08.2008 в 14:40)
 

В интернете очень много информации об SQL-инъекциях и способах защиты о них:
http://ru.wikipedia.org/wiki/Инъекция_SQL

  Ответить  
 
 автор: Николай2357   (16.08.2008 в 19:08)   письмо автору
 
   для: SportSoft   (16.08.2008 в 14:57)
 

Хорошая статья, от меня отдельное спасибо.
Можно, как нубу, спросить, есть ведь принципы построения SQL инъекций, наверное в определенных случаях должна срабатывать "универсальная" защита, наподобие этой (только принципов я не знаю):
<?
if(preg_match("/все, что опасно/i",$prov)){
header ("Location: go.nax")
}else{
echo 
"Добро пожаловать.";
}

  Ответить  
 
 автор: BinLaden   (16.08.2008 в 19:26)   письмо автору
 
   для: Николай2357   (16.08.2008 в 19:08)
 

Николай2357, пока на Вас не накинулись с дубинками, я Вам скажу, что "принципы построения SQL инъекций" основаны на уязвимостях. Нужно правильно обрабатывать данные, а не что-то проверять. Не будет уязвимости - не будет проблем.

Правила построения SQL-запросов очень простые:

0) Все строки перед обрамлением в кавычки/апострофы нужно обрабатывать функцией mysql_escape_string():

<?php
$string 
"Любая строка '\\\0\r\n";
$query "SELECT ... WHERE `string` = '" mysql_escape_string($string) . "';";
?>


1) Все числа приводить к integer/float:

<?php
$num1 
= isset($_GET['num1']) ? (int)  $_GET['num1'] : 0;
$num2 = isset($_GET['num1']) ? (float)  $_GET['num1'] : 0;
$query "SELECT ... WHERE `num1` = {$num1} AND `num2` = {$num2};";
?>


2) Не позволять пользователю самому формировать части SQL-запроса вида

<?php
$query 
"SELECT ... " $_GET['something'];
?>


И всё!

P.S. Иногда, заметил, советуют решить вот эту задачу: http://softtime.ru/info/task.php?id_article=110
Вам тоже настоятельно рекомендую. После правильного и самостоятельного решения будет намного меньше подобных вопросов.

  Ответить  
 
 автор: Николай2357   (16.08.2008 в 19:43)   письмо автору
 
   для: BinLaden   (16.08.2008 в 19:26)
 

Вот это да! Зачем читать учебники, долго и муторно, когда можно получить такой сногсшибательный ответ на форуме! (шутка конечно, читать буду, но тут гораздо продуктивней!)
Спасибо огромное, что делитесь опытом, Родина Вас не забудет!
Спасибо.

  Ответить  
 
 автор: BinLaden   (16.08.2008 в 19:49)   письмо автору
 
   для: Николай2357   (16.08.2008 в 19:43)
 

Я вот только боюсь, что разобраться всё равно Вы не захотите.

  Ответить  
 
 автор: Николай2357   (16.08.2008 в 19:52)   письмо автору
 
   для: BinLaden   (16.08.2008 в 19:49)
 

Это зря.

  Ответить  
 
 автор: BinLaden   (16.08.2008 в 20:57)   письмо автору
 
   для: Николай2357   (16.08.2008 в 19:52)
 

Я тоже так думаю.

  Ответить  
 
 автор: Незнайка   (16.08.2008 в 21:49)   письмо автору
 
   для: BinLaden   (16.08.2008 в 20:57)
 

Родина Вам не забудет :)

  Ответить  
 
 автор: Николай2357   (19.08.2008 в 10:31)   письмо автору
 
   для: BinLaden   (16.08.2008 в 19:49)
 

Здравствуйте.
Пока тема не ушла в небытие, осмелюсь попросить совета.
Вот у меня много страниц, на которых много запросов в бд. Оправдано ли такое решение:
я хочу отдельным файлом сделать следующее
<?
function esc_str($string){
if (
get_magic_quotes_gpc()) $string stripslashes($string);
if (
is_numeric($string)) {
$string=intval($string);
}else{
$string =  mysql_real_escape_string($string);
    }
return 
$string;
}

и обрабатывать поступающие данные этой функцией, подключая файл к нужным страницам. Или я опять намудрил?
И еще, чтоб не портить бумагу, что то не совсем я разобрался в сессиях. Вчера тестировал сайт на хостинге, потом отключил интернет, не закрывая страницу, и ушел спать. Сегодня был ос\чень удивлен, когда оказалось, что все переменные в сессии живы... Мне казалось, что сессия должна жить не больше 24 минут (где то прочитал)... Странно...

PS Не совсем понял про
>1) Все числа приводить к integer/float:
можно чуть подробнее, в комментариях к задаче, рекомендованной Вами, я такого не нашел.
Спасибо.

  Ответить  
 
 автор: cheops   (19.08.2008 в 11:48)   письмо автору
 
   для: Николай2357   (19.08.2008 в 10:31)
 

Мне is_numeric() не очень нравится - если число будет в строковом представлении - оно не будет обработано при помощи функции intval().

  Ответить  
 
 автор: Николай2357   (19.08.2008 в 12:36)   письмо автору
 
   для: cheops   (19.08.2008 в 11:48)
 

Подскажите, а числовой строкой тоже можно навредить в запросе?

  Ответить  
 
 автор: AcidTrash   (19.08.2008 в 13:02)   письмо автору
 
   для: Николай2357   (19.08.2008 в 12:36)
 

Да здесь имеется ввиду, что не числом вы можете навредить, а тем ,что заместо числа, может подставиться кусок SQL-запроса.

  Ответить  
 
 автор: Trianon   (19.08.2008 в 12:58)   письмо автору
 
   для: Николай2357   (19.08.2008 в 10:31)
 

Можете попробовать применить Вашу функцию в решении 21-й задачи.
Всё же самому убедиться в чем-то - проще, чем разводить очередной флейм.

  Ответить  
 
 автор: Николай2357   (19.08.2008 в 13:55)   письмо автору
 
   для: Trianon   (19.08.2008 в 12:58)
 

Прошу конечно прощенья, для Вас это наверное флейм и хиханьки, но как же я узнаю, правильно ли я решаю эту задачу, если не буду спрашивать?
Вы думаете я сижу, ножки свесил, и жду, когда мне на блюдечке супер решение выложат?
Просто по своей природной глупости и малоопытности многого не понимаю. Допустим, я "тестировал" свою функцию и пока не пойму, как можно "протащить" через нее вредный кусок запроса. Я ведь не знаю, какими они бывают. Служебные символы она экранирует, имя "I don't know" при обработке на выходе stripslashes() отображается корректно, что еще не так, пока не знаю, по этому и прошу совета. Вот можете мне показать маленький примерчик, как можно тут навредить?
PS Задача стоящая, полезная, но кто ответ оценит, конкурс то давно тютю...

  Ответить  
 
 автор: BinLaden   (19.08.2008 в 14:11)   письмо автору
 
   для: Николай2357   (19.08.2008 в 13:55)
 

> но как же я узнаю, правильно ли я решаю эту задачу, если не буду спрашивать?

Тестировать свой скрипт. Конкретно - скрипт с авторизацией в 21-ой задаче. А не одну единственную функцию.

> Задача стоящая, полезная, но кто ответ оценит, конкурс то давно тютю...

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

  Ответить  
 
 автор: Николай2357   (19.08.2008 в 14:31)   письмо автору
 
   для: BinLaden   (19.08.2008 в 14:11)
 

Спасибо, я так и сделаю.

  Ответить  
 
 автор: Trianon   (19.08.2008 в 14:42)   письмо автору
 
   для: Николай2357   (19.08.2008 в 13:55)
 

1. Не беспокойтесь, проверить решение поможем.
2. поймите, важно не только зарезать вредноносное обращение.
Важно еще и не испортить данные, которые были введены.
примеров (маленьких и не очень) в обсуждениях к решениям было достаточно.
Специально для Вашего случая приведу еще один.
Регистрируется некий Джеймс Бонд под ником 007. Что Ваша функция с ним сделает?

  Ответить  
 
 автор: Николай2357   (19.08.2008 в 15:12)   письмо автору
 
   для: Trianon   (19.08.2008 в 14:42)
 

Точно.
Ну все, не отвлекайте меня, я задачей увлекся.
(Шутка, спасибо, обязательно ее решу.)

  Ответить  
Rambler's Top100
вверх

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