Перейти к содержанию
Форум поддержки пользователей VamShop

Функция PHP include()


Рекомендуемые сообщения

Всем известно из покон веков что функция include() имеет ряд уязвимостей при определенном обращении с ней. Так вот, что бы мне не переживать, я потом (но еще не решил) поменять все функции include на require. Повлияет ли это на функциональность магазина? Если да то как и где?

Надеюсь на развернутый ответ.

Спасибо

Ссылка на сообщение
Поделиться на другие сайты

А что за уязвимости?!

На функциональность, по идее, не должно повлиять, но, в любом случае, надо пробовать.

Ссылка на сообщение
Поделиться на другие сайты

Уязвимость известна еще с 2005 (может и еще раньше) и сами разработчики php,  на php.net выкладывали рекомендации о том что не стоит использовать эту функцию, если очень надо, можно но, осторожно.

Если погуглить "php include функция уязвимость" и/или  "php include function vulnerability" можно найти кучу инфы. Еще для самореализации в качестве программиста можно почитать пару слов о функциях include, include_once, require, require_once на php.net.

Ссылка на сообщение
Поделиться на другие сайты

Саша, не стоит тратить на это время. По двум причинам:

1. Замена include на require ничего не даст - уязвимость общая для всего семейства (include, include_once, require, require_once).

2. Сама уязвимость связана не с оператором include, а с его не безопасным использованием. include делает своё дело - подключает указанный файл. Поэтому возникает опасность подключения "левого" файла:

- Когда ты ему укажешь файл с другого сайта, если это не запрещено конфигурацией PHP (allow_url_fopen).

- Когда ты ему укажешь "не свой" локальный файл, например классический пример - /etc/passwd где-то на своём сервере и у тебя не установлены в конфигурации PHP include_path.

Понятно, что человек в здравом уме и сознании этого делать не будет. Значит опасность возникает тогда, когда имя подключаемого файла передаётся через переменную и не контролируется скриптом. Классический примеры:

include($_GET['file']);

$file = $_GET['file'];

include($file);

Много у тебя таких?

Ссылка на сообщение
Поделиться на другие сайты

Да я менять ничего и не собирался, просто почитать, интересно.

Спасибо за разъяснение.

Нет, не много, да вроде бы и вообще нет, в том смысле, что нет include, require из $_GET, $_POST

Ссылка на сообщение
Поделиться на другие сайты

Уязвимость известна еще с 2005
а еще известно, что бывает горе от ума.

не, думать, конечно, умом надо. но не надо пытаться анализировать каждый свой пук из глубины души. :)

Ссылка на сообщение
Поделиться на другие сайты

вообще нет, в том смысле, что нет include, require из $_GET, $_POST

Вот и я о том же.

Конечно необходимо заметить, что при включённых глобальных переменных ситуация усложняется и нужно позаботиться о достоверности используемых переменных. Что вообще-то нужно делать всегда :)

Ссылка на сообщение
Поделиться на другие сайты

2ABerezin:Ответ #4: В вашем варианте нужна дополнительная проверка данных. Без нее сломают на раз-два. А лучше вообще использовать другой вариант реализации сей идеи. А вот сами разработчики php настоятельно рекомендовали использовать require за место include.

Лучше думать заранее чем голову ломать потом ;)

Ссылка на сообщение
Поделиться на другие сайты
×
×
  • Создать...