2

GET または POST 変数をスクリプトに渡したくありません。ファイル名を使用して、たとえばphpスクリプトから製品を検索するために使用したい:

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

3 つの質問があります。

  1. PHP はどこからデータを取得し$_SERVER["SCRIPT_NAME"]ますか?それはサーバーまたはクライアントのブラウザーからですか?

  2. これを使用する際のセキュリティ上の問題について考えられる人はいますか?

  3. とにかく、これは古いブラウザと互換性がない可能性があります. サーバーによって提供されているとは思いませんか?

4

4 に答える 4

7

$_SERVER['SCRIPT_NAME']サーバーサイドです。その結果、ブラウザーの互換性の問題はなく、要求された URL (つまり、http: //example.com/http://example. com/index.phpはどちらも'/index.php') になります。

とはいえ、製品ごとに異なる PHP スクリプトを使用することは、安価で単純なデータベース駆動型のサイトのこの時代において、非常に非効率的であると私は思います。

于 2009-08-27T15:43:52.437 に答える
4

これが古い投稿であることは知っていますが、Google で「PHP $_SERVER セキュリティ」をすばやく検索すると、この投稿が表示され、信じられませんでした。

どの程度安全だと考えているかに関係なく、すべての入力をエンコードしてチェックする必要があります。たとえば、HTTP_HOST サーバー変数は、クライアントから送信された要求のヘッダーから読み取られます。「クライアント」は、ブラウザーだけでなく、何でもかまいません...たとえば、誰かがこれらのヘッダーをファジングするために特別に作成した PERL/python スクリプトなどです。

PHPドキュメントから(再び)...

「HTTP_ホスト」

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;

?>

アプリケーションへの入力が安全であると思い込まないでください。怠け者になる価値はありません。他の人の考えに関係なく、すべてをエンコードしてチェックしてください。

于 2013-09-27T14:04:14.493 に答える
-1

セキュリティ上の問題はなく、サーバー上で作成されるため、クライアントのブラウザーに依存しないと思います。使っていただけると思います。

于 2009-08-27T15:45:11.017 に答える
-1

PHP.net

$_SERVER は、ヘッダー、パス、スクリプトの場所などの情報を含む配列です。この配列のエントリは、Web サーバーによって作成されます。すべての Web サーバーがこれらのいずれかを提供するという保証はありません。サーバーは、一部を省略したり、ここにリストされていないものを提供したりする場合があります。

サーバーによって生成されるため、完全に安全に使用できます。個人的な注意として、私はスーパーグローバルからのものは、それがどれほど安全であるかに関係なく、常にサニタイズします.

于 2009-08-27T15:47:24.147 に答える