Безопасно ли использовать $ _SERVER ["SCRIPT_NAME"] - PullRequest
2 голосов
/ 27 августа 2009

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

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

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

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

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

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

Ответы [ 4 ]

7 голосов
/ 27 августа 2009

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

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

4 голосов
/ 27 сентября 2013

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

Вы должны кодировать и проверить все входы независимо от того, насколько вы думаете, это безопасно. Например, переменная сервера 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;

?>

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

0 голосов
/ 27 августа 2009

PHP.net

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

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

0 голосов
/ 27 августа 2009

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

...