PHP: предотвратите взламывание папки - если путь имеет../в нем?

я делаю простую штуку в php, и я задаюсь вопросом, как я могу протестировать, если переменный $path содержит следующую структуру../

таким образом, у меня просто будет a? структура path=somepath в моем URL, и если кто-либо ввел бы../его, позволяет ему идти один каталог. Я знаю, конечно, что это не лучшее решение, однако для моей небольшой штуки, которая это достаточно, если я просто тестирую переменную $path на строку ".. /" в нем. раз так умрите ();

я не уверен, что является лучшим способом протестировать это!

матовые отношения

7
задан matt 27 July 2010 в 09:38
поделиться

4 ответа

чтобы ответить на ваш вопрос:

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 и включите соответствующий файл (или что вам нужно сделать).

2
ответ дан 6 December 2019 в 15:17
поделиться

Я - альтернативное решение, позволяющее настроить 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 будет добавлена ​​....

0
ответ дан 6 December 2019 в 15:17
поделиться

Вместо этого можно просто вызвать realpath() и проверить, является ли путь, по которому он должен находиться, префиксом этого.

Еще лучше, почему бы не вести белый список и не отклонять все, что в него не входит?

12
ответ дан 6 December 2019 в 15:17
поделиться

один из простых способов - усилить защиту конфигурации php.ini , в частности директивы open_basedir . Имейте в виду, что некоторые системы CMS действительно используют .. \ довольно много в коде, и когда они включаются вне корневой папки, это может создать проблемы. (т.е. грушевые модули)

Другой метод - использовать mod_rewrite .

Если вы не используете включаемый файл для проверки каждого URL на предмет внедрения из переменных $ _ GET и $ _ SERVER ['request_uri'] , вы откроете двери для такого рода атаки. например, вы можете защитить index.php , но не submit.php . Вот почему усиление защиты php.ini и .htaccess является предпочтительным методом.

0
ответ дан 6 December 2019 в 15:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: