Вопрос № 101913: Добрый день!
В своем сайте я интенсивно использую
<?php
include ('$QUERY_STRING');
?>
Но вчера меня предупредили, что это очень опасно с точки зрения взлома. Как этого избежать?
Заранее благодарен....
Вопрос № 101.913
Добрый день!
В своем сайте я интенсивно использую
<?php
include ('$QUERY_STRING');
?>
Но вчера меня предупредили, что это очень опасно с точки зрения взлома. Как этого избежать?
Заранее благодарен.
Отправлен: 13.09.2007, 13:06
Вопрос задал: Ігор (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Стас Тельнов/[анти]КИЛЛЕР
Здравствуйте, Ігор!
Да, приведённый вами код довольно уязвим для хакера. Ведь $QUERY_STRING формируется пользователем. У вас же подключается значение этой переменной и выводится в браузер. А если в этой переменной будет содержаться какой-либо системный файл, то хакер сможет посмотреть и его содержимое… Конечно, у хорошего хостинга все необходимые файлы должны быть защищены от подключения путём include(), но всё таки… Вы ведь не где не проверяете что именно ввёл пользователь и что именно хранится в переменной $QUERY_STRING.
Как этого избежать? Зависит от того, что именно вы хотите сделать. В частности если вы точно знаете, что в этой переменной содержится путь к файлу и он всегда одинаков, то можно у этой строки вырезать первые символов и проверять их. Например в $QUERY_STRING содержится "/path/file.txt", и вы берёте и проверяете, чтобы первые 6 символов были именно "/path/" А если, например, всегда разрешение подключаемого файла txt, то можно вырезать последние 3 символа и проверять на соответствие именно их.
Хоть и вкратце, но надеюсь я вам объяснил чем опасен именно ваш кусок кода.
--------- Не стыдно не знать, стыдно не учиться
Отвечает: Flynn
Здравствуйте, Ігор!
Хакер без проблем может вывести любой файл, что у вас находится на хостинге и к которому есть доступ у РНР. Конечно если это будет какой файл с РНР кодом - то скрипт его просто обработает и выведет что и должен, но если там просто текст сразу - скрипт его так же и выведет.
Чтобы защититься я бы лично вообще посоветовал изменить структуру сайта. Но если это не подходит, то первым делом проверяйте - не заданы ли точки или слешы в начале $QUERY_STRING. Если они есть - вырезайте их - это дает возможность взломщику менять директорию. Проверяйте вхождение точки несколько раз - если у вас передается расширение файла и больше нигде она как разделитель не используется. А еще лучше если все файлы одного типа - убрать расширение вообще и проверять на вхождение через preg_match() только буквы
и цыфры.
Ответ отправил: Flynn (статус: 6-ой класс)
Ответ отправлен: 13.09.2007, 23:09