Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Опасные cookies


Автор: Wolf1994 30.12.2008, 23:01
Попробовал поставить функцией setcookie cookie с апострофом - '. При чтении кука оказалась забэкслешенной. Попробовал поставить такую куку в редакторе cookies в FireFox 3 - схожий результат. Возможно ли, в принципе, поставить в куку "нормальный" апостроф? Возможно, есть какие-то "хакерские" браузеры, которые делают это?

Автор: Sunvas 30.12.2008, 23:53
Цитата(Wolf1994 @  30.12.2008,  23:01 Найти цитируемый пост)
При чтении кука оказалась забэкслешенной.

Возможно это сервер слеширует все входящие данные? Глянь оригиналы заголовков, которые посылает браузер - тогда точно будешь знать, где проблема. Да, и функцию stripslashes никто не отменял.

Добавлено через 1 минуту и 29 секунд
Попробуй вот что:
Код

if(get_magic_quotes_gpc())
{
    $cookie=stripslashes($cookie);
}

Автор: Wolf1994 31.12.2008, 00:18
Заголовки посылаемые браузером читать не умею, только посылаемые документом. Буду благодарен за объяснение, как это сделать.

Если get_magic_quotes_gpc() возвращает true, значит ли это что сервер бэкслеширует ВСЕ переменные, приходящие от пользователя? И значит ли это также, что SQL-инъекция на основе данных, полученных от пользователя, невозможна?

Автор: theworldcreator 31.12.2008, 02:05
https://addons.mozilla.org/en-US/firefox/addon/3829/, полезная штука, показывает входящие/исходящие заголовки, ИМХО очень нужна тому, кто хочет понять суть протокола HTTP.
Цитата

Если get_magic_quotes_gpc() возвращает true, значит ли это что сервер бэкслеширует ВСЕ переменные, приходящие от пользователя?

Да.
SQL инъекция все равно возможна. Даже не забивай себе голову как, просто пользуйся функцией, которая точно тебя от инъекций обезопасит, ко всем входящим строковым данным, http://ru2.php.net/mysql_real_escape_string.

Автор: Sunvas 31.12.2008, 02:15
Цитата(theworldcreator @  31.12.2008,  02:05 Найти цитируемый пост)
которая точно тебя от инъекций обезопасит, ко всем входящим строковым данным, mysql_real_escape_string.

А вдруг у человека другая БД Postgres та же..  smile 

Вообще включенный magic_quotes_gpc === зло. Во всех популярых движках, если слеширование включено, оно прибивается. Можно попробовать отключить его при помощи .htaccess строкой:

Код

php_flag magic_quotes_gpc off


Но, думаю, проблему уже нашли smile

Автор: Wolf1994 31.12.2008, 02:22
theworldcreator, спасибо за ссылку.

Этой функцией я пользуюсь, но забыл поставить её на данные, получаемые с кук. Теперь ломаю голову, возможен ли был взлом при таком запросе:

Код

 $sql="SELECT * FROM `members` WHERE `name`='".$_COOKIE [$cmember]."' AND `password`='".$_COOKIE [$cpassword]."'";


Попробовал взломать его, поставив на member:
Wolf' OR (`id`='305
и password:
test') OR `id`='1
В результате должен был получится запрос:
Код

SELECT * FROM `members` WHERE `name`='Wolf' OR (`id`='305' AND `password`='test') OR `id`='1'

но апострофы экранировались и в результате никакой инъекции не получилось.

Если есть хоть малейшая возможность взломать такой запрос, прошу подсказать, как это возможно.

Автор: Sunvas 31.12.2008, 02:28
Цитата(Wolf1994 @  31.12.2008,  02:22 Найти цитируемый пост)
но апострофы экранировались и в результате никакой инъекции не получилось.

А ты попробуй послать: \'

Автор: Wolf1994 31.12.2008, 02:31
Пробовал, в результате получался двойной "экран": \\\'

Автор: theworldcreator 31.12.2008, 03:14
В таком случае, насколько я знаю, взлом невозможен, проблемы обычно идут от неиспользования кавычек в оформление непроверенных пользовательских данных. На хакеры - народ изощренный. Во всяком случае они уделят больше времени придумыванию способы взлома, чем мы, так что лучше обезопасится.

Добавлено через 6 минут и 21 секунду
Кстати вместо
Код

`id` = '305'

проще использовать
Код

1 = '0'

а вместо
Код

`id` = '1'

правильней
Код

`id` = 1

(если `id` - столбец числового типа данных)
smile

Добавлено через 8 минут и 59 секунд
P.S. Как правильно заметил Sunvas все мои знания - знания о СУБД MySQL, об остальных я не знаю ничего, так как не использовал, и говорю предполагая что у вас именно она.

Автор: Wolf1994 31.12.2008, 11:19
theworldcreator, Sunvas, спасибо за ответы. Вопрос решён.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)