Насколько безопасно использовать $ _SERVER [SCRIPT_NAME]

Я не хочу передавать в скрипт переменные GET или POST. Я хочу использовать имя файла и использовать его для поиска продукта в скрипте php, например:

......./DELL1500.php ......./COMPAQ1213.php

У меня три вопроса:

  1. Откуда PHP получает данные из $_SERVER["SCRIPT_NAME"] - с сервера или браузера клиента?

  2. Кто-нибудь может подумать о каких-либо проблемах безопасности при использовании этого?

  3. Может ли это быть несовместимо с какими-либо старыми браузерами. Я полагаю, что нет, если это предоставляется сервером?


person Community    schedule 27.08.2009    source источник
comment
оххх ... вот как вы пишете кошмар обслуживания ...   -  person nickf    schedule 27.08.2009
comment
Неужели никто не подумал, что $_SERVER назначается сервером .. отсюда глобальная переменная?   -  person Daryl Gill    schedule 22.04.2013
comment
Браузеры (и другие пользовательские агенты) могут влиять на некоторое содержимое $ _SERVER (например, $ _SERVER ['HTTP_ACCEPT']), поэтому, если вы не уверены в настройке, лучше спросить, чем предполагать!   -  person Russ    schedule 23.09.2013


Ответы (4)


$_SERVER['SCRIPT_NAME'] на стороне сервера. В результате не возникает проблем с совместимостью с браузером и не должно быть проблем с безопасностью, поскольку это просто указание того, что сервер обслуживает для запрошенного URL (например, http://example.com/ и http://example.com/index.php приведет к '/index.php').

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

person ceejayoz    schedule 27.08.2009

Я знаю, что это старый пост, но при быстром поиске в Google безопасности PHP $ _SERVER я нашел его, и я не мог поверить в то, что вижу.

Вам следует кодировать и проверять все входные данные, независимо от того, насколько вы считаете это безопасным. Например, серверная переменная HTTP_HOST считывается из заголовков запроса, отправленного клиентом. Клиентом может быть что угодно ... не только браузеры ... например, сценарий PERL / python, который кто-то написал специально для фазирования этих заголовков.

Из документации PHP (снова) ...

HTTP_HOST

Contents of the Host: header from the current request, if there is one.

В запросе клиента почти всегда есть HTTP_HOST. Это не единственная переменная, Apache и PHP не очищают / не кодируют эти переменные за вас. Вы должны ВСЕГДА кодировать и проверять ВСЕ входные данные, включая сгенерированные сервером.

<?php
$server = array();
foreach($_SERVER as $k => $v)
  $server[urlencode($k)] = urlencode($v);

if(!preg_match("...", "...", $server["X"]))
  exit;

?>

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

person Morbo    schedule 27.09.2013

Я думаю, что нет проблем с безопасностью, и он создается на сервере, поэтому не зависит от браузера клиента. Я думаю, ты можешь это использовать.

person mck89    schedule 27.08.2009

PHP.net

$ _SERVER - это массив, содержащий такую ​​информацию, как заголовки, пути и расположение скриптов. Записи в этом массиве создаются веб-сервером. Нет гарантии, что каждый веб-сервер предоставит что-либо из этого; серверы могут опускать некоторые или предоставлять другие, не перечисленные здесь.

Он должен быть полностью безопасным в использовании, поскольку генерируется сервером. Лично я всегда дезинфицирую что-либо из суперглобального, независимо от того, насколько он должен быть безопасным.

person nilamo    schedule 27.08.2009