Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: SQL инъекция и методы борьбы

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Методы защиты от SQL инъекций
Айратиус
Отправлено: 27 Апреля, 2014 - 22:34:40
Post Id



Частый гость


Покинул форум
Сообщений всего: 192
Дата рег-ции: Нояб. 2012  
Откуда: Россия


Помог: 0 раз(а)




Всем доброго времени суток. Вечер был на ура, но он сразу же испортился как мой знакомый, который не имеет никакого доступа к моим сайтам вдруг сказал логин от моей базы одного из сайтов. И тут мое сердце остановилось. Потом поделился замечательной прогой SQLmap, я конечно быстро за комп и в гугл. В итоге я конечно не смог увидеть свой логин пароль, но список баз данных через прогу увидел.

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

вот то, что я ввел в SQLmap
CODE (htmlphp):
скопировать код в буфер обмена
  1. python sqlmap.py -u http://site.kz/index.php?id=17 --dbs
 
 Top
OrmaJever
Отправлено: 27 Апреля, 2014 - 23:35:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Айратиус пишет:
В итоге, как защититься от всего этого?

Доверить написание скриптов более серьёзным людям. Если в гугле написать "защита от sql иньекций в php" я уверен будет миллионы ссылок, эта тема уже так вытоптана что даже добавить нечего.

(Отредактировано автором: 27 Апреля, 2014 - 23:36:00)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
esterio
Отправлено: 28 Апреля, 2014 - 12:03:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




OrmaJever
вытоптана то она вытоптана. только в каком направлении
например вот здесь
http://malinichev[dot]ru/articles/sql-injection[dot]html
PHP:
скопировать код в буфер обмена
  1. $id = $_GET['id']; // Заносим значения GET параметра id в переменную
  2. $id = $db->real_escape_string($id); // Обрабатываем на спец. символы
  3. $id = intval($_GET['id']); // Выбираем только целое число
  4. $query = $db->query("SELECT * FROM `news` WHERE `id` = '".$id."'"); // Выбираем новость по полученным параметрам
  5.  

Так что нужно еще найти достойную статейку

Внимание для новичков: это плохой код
 
 Top
Айратиус
Отправлено: 28 Апреля, 2014 - 17:38:27
Post Id



Частый гость


Покинул форум
Сообщений всего: 192
Дата рег-ции: Нояб. 2012  
Откуда: Россия


Помог: 0 раз(а)




В общем вот что сделал сам. В самом начале когда для определенного сайта проделывал следующее
CODE (htmlphp):
скопировать код в буфер обмена
  1. python sqlmap.py -u http://site.kz/index.php?id=17 --dbs

я мог видеть базы данных и соответственно что в них храниться.
было

PHP:
скопировать код в буфер обмена
  1. if (isset($_GET['id'])){$id=$_GET['id']}


потом переделал следующим образом

PHP:
скопировать код в буфер обмена
  1. if (isset($_GET['id'])){
  2. if(preg_match("|^[\d]+$|", $_GET['id'])){
  3. $id= $_GET['id'];
  4. }}
то есть проверил является ли id числом. и только после этого я перестал видеть список баз даных и их содержимое
 
 Top
teddy
Отправлено: 28 Апреля, 2014 - 18:43:21
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Айратиус пишет:
потом переделал следующим образом

и зачем тут preg_match?
приводите сразу к числу а все остальное отбрасывайте. Используйте для приведения к числу либо функцию intval либо (int) перед переменной.

А если надо проверить целое число ли это то будет достаточно функции ctype_digit
PHP:
скопировать код в буфер обмена
  1. if(!ctype_digit($_GET['id'])){
  2.     exit('Не число');
  3. }
 
 Top
Айратиус
Отправлено: 03 Мая, 2014 - 22:12:17
Post Id



Частый гость


Покинул форум
Сообщений всего: 192
Дата рег-ции: Нояб. 2012  
Откуда: Россия


Помог: 0 раз(а)




teddy пишет:
Айратиус пишет:
потом переделал следующим образом

и зачем тут preg_match?
приводите сразу к числу а все остальное отбрасывайте. Используйте для приведения к числу либо функцию intval либо (int) перед переменной.

А если надо проверить целое число ли это то будет достаточно функции ctype_digit
PHP:
скопировать код в буфер обмена
  1. if(!ctype_digit($_GET['id'])){
  2.     exit('Не число');
  3. }



Списибо, учту
 
 Top
OrmaJever
Отправлено: 03 Мая, 2014 - 22:20:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




teddy пишет:
А если надо проверить целое число ли это то будет достаточно функции ctype_digit

Грязный хак
PHP:
скопировать код в буфер обмена
  1. $d = '1232d';
  2. var_dump((string)(int)$d == $d);

Закатив глазки


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Администрирование БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB