2016-07-27 2 views
6

Как веб-мастер, мне нужно идентифицировать сценарии риска.

Я всегда пишу php-код, который фильтрует ввод пользователя. I Не доверяйте пользовательскому вводу, выбирайте, какие символы действительны (vs не разрешает некоторые), используйте собственную функцию фильтрации php (filter_input) или используйте утилиты lib/frameworks.

Сегодня я искал брешь безопасности в загруженных модулях и нашел этот код:

if (isset($_GET['css_file_name'])) {   
    $cssFileName = _PS_MODULE_DIR_ . DS . "xxxx" . DS . "css" . DS . $_GET['css_file_name'] . ".css"; 
    echo file_get_contents($cssFileName); 
} 
echo ""; 

Я думаю, что это небезопасно, он не уважает основное правила не доверяйте пользовательский ввод. Итак, я решил доказать это, я попытался добавить символы DEL ascii, чтобы удалить .css и иметь возможность найти любой файл (например, файл php с учетными данными), но мне это не удалось.

Так что мой вопрос: этот код действительно настолько неуверен? Можно ли захватить PHP-файл с ним (вы можете продемонстрировать это?)

+0

Если мы не можем придумать эксплойт, тогда это безопасно? Ваш вопрос интересен, но безопасность - это больше способ мышления, и вы сами сомневаетесь, безопасно это или нет. Это явный признак того, что в этом случае будет нужен белый список, потому что трудно доказать, что он безопасен. – martinstoeckli

ответ

1

Возможная атака: Нулевой байт отравление функции file_get_contents может выявить или включать содержимое некорректных файлов:

$ ls 
file.php nullbyte.php 
$ cat file.php 
I am the contents. 
$ cat nullbyte.php 
<?php 
$input = "file.php\0.jpg"; 
echo file_get_contents($input); 
echo "\n"; 
?> 
$ php nullbyte.php 
I am the contents. 

This информация относится только к старым (неподдерживаемым) версиям PHP.

Утилизация Null byte была исправлена ​​в PHP 5.3.4 (которая сама по себе является старой и неподдерживаемой версией PHP): https://bugs.php.net/bug.php?id=39863.

Возможные исправления для старых версий PHP:

<?php 
    $clean = str_replace(chr(0), '', $input); 
?> 

Однако, злоумышленник может перечислить все возможные CSS файлы всей файловой системы в вашем примере, что можно выйти из веб-сервера.

Смежные вопросы