Сайт уязвим на инъекцию SQL Injection


5 0

Сегодня я увидел в своем ящике интересное сообщение от неизвестного, причем не указавшего даже своего e-mail адреса. Как отвечать такому человеку? А ответить хочется, потому что человек в опасности:

Я на своём сайте 'поигрался'(те проверил на инъекции) чуть с параметрами голосования и загрузилась пустая страница, высветила мне следующее:

ivalid query: select count(id) from votes where vote_name_id=999999999abc9999999999 and variant_id=60

Это значит мой сайт уязвим на инъекции?

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

ivalid query: select count(id) from votes where vote_name_id='999999999abc9999999999' and variant_id='60'

То есть все значения в запросе должны быть в одинарных кавычках. Во вторых, переменая, через которую ты получаешь значение 999999999abc9999999999 должна провертся на наличие одинарной кавычки и экранироваться. Экранирования может не быть, если включены магические кавычки, но на это лучше не надеятся, а проверять - включены они или нет самостоятельно и если не включены, то экранировать.

Сколько уже времени прошло с появления проблемы SQL Injection, но ошибки с инъекцией SQL до сих пор очень распространены и являются очень опасными.

P.S. Если задаете вопросы мне через обратную связь, то хотя бы оставляйте свои адреса, чтобы я мог ответить.


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

Николай

05 Aпреля 2009

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


Overdrive

05 Aпреля 2009

Самое смешное то, что даже очень крупные сайты имеют данные уязвимости. Нашел недавно крупный портал геймеров Великобритании. Так переменные вообще не фильтруются.
Произвел DOS через SQL inj, чтобы админы проснулись и исправили баги. Но как я понял, они даже не поняли что произошло.


Николай

05 Aпреля 2009

И ещё - может Вы бы смогли сделать проверку на заполненые поля в почтовой форме? что бы такое не повторялось...


Михаил Фленов

05 Aпреля 2009

Причем тут заполнение почтовой формы? В ней нужно проверять корректность e-mail, и это можно регулярным выражением. В инете полно готовых решений.


Владимир

29 Aпреля 2009

Николаю. Подробно об SQL-injection:
http://www.php.net/manual/ru/security.database.sql-injection.php

а также
http://www.php.net/manual/ru/function.mysql-escape-string.php
и
http://www.php.net/manual/ru/function.mysql-real-escape-string.php


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне