[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Безопасность scandir
savelikan
Доброго времени суток! Помогите, пожалуйста)
На моем сайте много информации хранится в файлах html. Храню их в директориях, которые получаю через scandir.
Вожможно както обезопасить себя, чтоб, например, пользователь не попал в директорию выше нужной?
например, у меня файлы хранятся в www/htmlbase/files/ , если пользователь выберет любую папку, плучаем запрос file.php?dir=files/newdir/...
php открывает папку из $real_address = 'htmlbase/'.$_GET['dir'];
Но пользователь может ввести file.php?dir=../../files/newdir/ и тогда откроется папка выше, чемь нужно...

_____________
Одесса - мой город!)))
netruxa
в php.ini у open_basedir можно указать все папки, к которым php будет иметь доступ

_____________
ввв.парсер.рф - онлайн система проверки позиций Вашего сайта в поисковиках. Для форумчан 100 рублей на счет.
savelikan
php должен иметь доступ ко всем папкам и файла чтоб их читать...
Нужно чтоб скрипт не читал директории выше той, в которой находится сам скрипт

Потому, что скрипту через GET передаю директорию, которую нужно прочитать
?addr=book/new/all

Но ведь можно передать вот так:
?addr=../../
и тогда покажет директорию выше.. а так нельзя...

_____________
Одесса - мой город!)))
Invis1ble
str_replace(['../', '..\\'], '', $_GET['dir']);


_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

savelikan
Цитата (Invis1ble @ 18.01.2017 - 18:20)
str_replace(['../', '..\\'], '', $_GET['dir']);

этого достаточно?
может есть еще какой-то способ недоброжелательному пользователю получить доступ к другим папкам?

_____________
Одесса - мой город!)))
Another Reality
Можно сделать белый или черный список директорий и прогонять по нему.
FatCat
Цитата (savelikan @ 18.01.2017 - 21:44)
этого достаточно?

Я параноик, поэтому поступил бы иначе. Сначала собрал бы массив разрешенных директорий, а потом проверил бы запрос на соответствие.

_____________
Бесплатному сыру в дырки не заглядывают...
inpost
savelikan
Если открывать можно все файлы из папки, то убери просто ".." , хотя тебе и одной точки не надо в названиях. Далее если файл есть, то подключаем, а если нет, то кидаем 404 страницу. Собственно как посоветовал Inv1sible, только ещё более проще предлагаю.

Если в папке много разных файлов часть из которых можно подключать, а вторую часть - нет, тогда храни перечень допустимых для подключения файлов как посоветовал FatCat.

Каждый по ситуации, сам уже принимай решение как поступишь.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.