безопасность php для ввода заголовка местоположения через $ _GET

У меня есть этот код на моей странице:

  header ("Location: $ page"); 

$ page передается скрипту как переменная GET, нужна ли мне безопасность? (Если да, то)

Я собирался просто использовать addlashes (), но это наполнило бы URL-адрес …

Related of "безопасность php для ввода заголовка местоположения через $ _GET"

Я мог бы перенаправлять ваших пользователей в любом месте, если захочу, чтобы я нажал ссылку, что, безусловно, является большой ошибкой безопасности (пожалуйста, зайдите на сайт http://www.yoursite.com?page=badsite.com). Теперь подумайте о сценарии, где badsite.com выглядит точно так же, как ваш сайт, за исключением того, что он улавливает ваши учетные данные пользователя.

Вам лучше определить массив $urls в вашем коде и передать только индекс в запись в этом массиве, например:

 $urls = array( 'pageName1' => '/link/to/page/number/1', 'pageNumber2' => '/link/to/page/number/2', 'fancyPageName3' => '/link/to/page/number/3', ); # Now your URL can look like this: # www.yoursite.com?page=pageName1 

Это уязвимость кода в книге. Пользователь может ввести любое значение, которое он хочет, и ваш скрипт будет подчиняться без каких-либо жалоб.

Но один из самых важных правил – даже если это не самое важное правило – это:

Никогда не доверяйте данным пользователя!

Поэтому вы должны проверить, какое значение было передано, и проверить его. Несмотря на то, что уязвимость в заголовке заголовка была исправлена ​​с использованием PHP 4.4.2 и 5.1.2 , вы все равно можете ввести любой допустимый URI, и пользователь, который его вызывает, будет перенаправлен на него. Даже такие загадочные, как ?page=%68%74%74%70%3a%2f%2f%65%76%69%6c%2e%65%78%61%6d%70%6c%65%2e%63%6f%6d%2f для URL, закодированного для ?page=http://evil.example.com/ .

Да, да. Просто потому, что вы или я не можем сразу думать о том, как воспользоваться этим небольшим количеством кода, не означает, что более умный человек не может этого сделать. То, что вы хотите сделать, это убедиться, что перенаправление идет на страницу, которую вы считаете доступной. Даже эта простая проверка могла бы работать:

 $safe_pages = array('index.php', 'login.php', 'signup.php'); if (in_array($page, $safe_pages)) { header("Location: $page"); } else { echo 'That page is not accessible.'; } 

Или, по крайней мере, определить белый список разрешенных URL-адресов и перенаправить пользователя только в том случае, если URL-адрес, который они поставили, находится в переменной GET, находится в списке.