Как веб-мастер, мне нужно идентифицировать сценарии риска.
Я всегда пишу 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-файл с ним (вы можете продемонстрировать это?)
Если мы не можем придумать эксплойт, тогда это безопасно? Ваш вопрос интересен, но безопасность - это больше способ мышления, и вы сами сомневаетесь, безопасно это или нет. Это явный признак того, что в этом случае будет нужен белый список, потому что трудно доказать, что он безопасен. – martinstoeckli