я делаю простую штуку в php, и я задаюсь вопросом, как я могу протестировать, если переменный $path содержит следующую структуру../
таким образом, у меня просто будет a? структура path=somepath в моем URL, и если кто-либо ввел бы../его, позволяет ему идти один каталог. Я знаю, конечно, что это не лучшее решение, однако для моей небольшой штуки, которая это достаточно, если я просто тестирую переменную $path на строку ".. /" в нем. раз так умрите ();
я не уверен, что является лучшим способом протестировать это!
матовые отношения
чтобы ответить на ваш вопрос:
if(strpos($path,'../') !== false){
// looks like someone 's trying to hack here - simply
// do nothing (or send an email-notification to yourself
// to be informed and see how often this happens)
}else{
// here comes the magic
}
но: вы действительно не должны этого делать. если вы хотите простого решения, используйте switch-statement для каждого возможного $path и включите соответствующий файл (или что вам нужно сделать).
Я - альтернативное решение, позволяющее настроить URL ....
<?php
$arr= array(
"register" => "register.php",
"login" => "userlogin.php",
"admin" => "adminlogin.php",
"etc" => "otherpage.php",
);
if ( isset ( $_GET['path'] )
if ( array_key_exists( $_GET['path'] , $arr) ){
//do some stuff...
include( $arr[$_GET['path']] );
}
else
echo 'Page Not Found!';
else
echo 'Required Field Empty!';
?>
Итак, вызываем index.php ? path = admin
страница adminlogin.php
будет добавлена ....
Вместо этого можно просто вызвать realpath()
и проверить, является ли путь, по которому он должен находиться, префиксом этого.
Еще лучше, почему бы не вести белый список и не отклонять все, что в него не входит?
один из простых способов - усилить защиту конфигурации php.ini
, в частности директивы open_basedir . Имейте в виду, что некоторые системы CMS действительно используют .. \
довольно много в коде, и когда они включаются вне корневой папки, это может создать проблемы. (т.е. грушевые модули)
Другой метод - использовать mod_rewrite .
Если вы не используете включаемый файл для проверки каждого URL на предмет внедрения из переменных $ _ GET
и $ _ SERVER ['request_uri']
, вы откроете двери для такого рода атаки. например, вы можете защитить index.php
, но не submit.php
. Вот почему усиление защиты php.ini
и .htaccess
является предпочтительным методом.