Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

mysql_escape_string и уязвимость

251
14 октября 2007 года
SkyMаn
1.7K / / 31.07.2007
Уязвим ли этот код? Допустима ли мускульная инъекция?
[html]
<form method="post">
<input type="text" name="login" /><br />
<input type="password" name="password" /><br />
<input type="submit />
</form>
[/html]
 
Код:
$login = mysql_escape_string( trim($_POST['login']) );
$password = mysql_escape_string(trim($_POST['password']) );        
$query = "SELECT id  FROM admins WHERE login='$login' AND DECODE(password, 'blabla')='$password'";
$rs = mysql_query($query);
if (@mysql_num_rows($rs) == 1){
//....signed...
}

Известно, что mysql_escape_string также экранирует символы кавычек, так что строка типа
Цитата:
bla' or 1=1;//


не пройдет в данном случае:

Цитата:
SELECT id FROM admins WHERE login=[COLOR=red]'bla\'[/COLOR] or 1=1 //' AND DECODE(password, 'blabla')='sdfa'


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

860
16 октября 2007 года
Abell2000
138 / / 15.01.2003
Вобщем то mysql_escape_string должна экранировать все спец цимволы которых не должно быть в mysql_query, но было бы неплохо перед этим пройтись preg_replace чтоб оставить только то что должно быть в переменной и ничего большего.
И хотелось бы посоветовать избавиться от проверки пароля прямо в запросе, просто если каким либо образом инъекция осуществится и конструкция or 1=1 // сработает, то мы получим доступ к ....signed... секции, а если пассворд проверяется отделно, то это уже непройдет
251
16 октября 2007 года
SkyMаn
1.7K / / 31.07.2007
Спасибо за ответ, но хотелось бы узнать конкретно по данному коду.
304
18 октября 2007 года
Fenyx
707 / / 26.01.2005
между кавычками будет восприниматься как одна строка типа [COLOR=#ff0000]'bla\'[/COLOR] or 1=1 //' и БД будет искть такой логин - уязвимости в конкретном примере нет - единственная трабла нагрузка на БД при последовательном переборе или поиске по индексу несуществуемой заведомо записи
251
18 октября 2007 года
SkyMаn
1.7K / / 31.07.2007
Спасибо, но это не есть большая проблема. :)
304
18 октября 2007 года
Fenyx
707 / / 26.01.2005
Цитата: SkyM@n
Спасибо, но это не есть большая проблема. :)


а хде плюсик :)) ?

251
18 октября 2007 года
SkyMаn
1.7K / / 31.07.2007
Цитата: Fenyx
а хде плюсик :)) ?


Какой? Там не должно быть плюсов.

304
19 октября 2007 года
Fenyx
707 / / 26.01.2005
Цитата: SkyM@n
Какой? Там не должно быть плюсов.


проехали :) я не про плюсик в коде :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог