Вопросы безопасности при включении файлов - PullRequest
2 голосов
/ 14 августа 2010

Я готовлюсь к настройке системы маршрутизации запросов в php на основе массива $ _GET.

Например, для URL ?r=login я бы использовал include myfiles/".$_GET['r'].".php";, который бы автоматически указывал на мои файлы/login.php

Я знаю, что мне нужно очистить входные данные get, но я обеспокоен тем, как можно злонамеренно перенаправить включение.Кто-нибудь может подсказать, как это предотвратить?Кроме того, могу ли я проверить, существует ли файл на самом деле, перед тем, как вызвать его?

У меня есть несколько собственных идей, я просто хочу знать, что я не пропустил никаких соображений.

Ответы [ 2 ]

5 голосов
/ 14 августа 2010

Это всегда хорошая идея, чтобы не включать файлы, указанные через URL.Если вы все еще хотите это сделать, используйте оператор switch или любой array, чтобы отфильтровать материал и включить только то, что вам нужно:

Пример 1:

$page = $_GET[...];

switch($page){
  case 'login': include 'login_page.php'; break;
  // and so on
  default: die("bye bad guy !");
}

Пример 2:

$page = $_GET[...];

$pages = array('page1.php', 'page2.php', 'page3.php');

if( in_array($page, $pages) )
{
    include($page);
{
else
{
   die("bye bad guy !");
} 

Я бы посоветовал вам взглянуть на следующие вопросы безопасности:

1 голос
/ 14 августа 2010

Если можете, используйте белый список.Если вы не можете, то:

  • разрешить только символы подчеркивания и буквенно-цифровые символы
  • поместить включаемые файлы в отдельный каталог
...