43

PHPページのフォームでは、次を使用できます。

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" ...>

また

<form action="#" ...>

また

<form action="" ...>

フォームのアクション属性で。echo$_SERVER['PHP_SELF']は使用する変数を渡さず、GETを使用する必要が""あるので、なぜそれを使用するのでしょうか"#"

変数が。で渡されないことを理解するのに時間がかかったので、私は尋ねています$_SERVER['PHP_SELF']。ありがとう。

4

6 に答える 6

65

action属性はデフォルトで現在のURLになります。これは、「フォームを元の場所と同じ場所に送信する」と言う最も信頼性が高く、最も簡単な方法です。

を使用する理由はなく、フォームをまったく送信$_SERVER['PHP_SELF']#ません(送信submitを処理するイベントハンドラーが添付されている場合を除く)。

于 2012-12-30T18:26:46.210 に答える
46

空の文字列を使用することは完全に問題なく、実際には単にを使用するよりもはるかに安全です$_SERVER['PHP_SELF']

使用する場合、URLの一部の後に$_SERVER['PHP_SELF']追加するだけで悪意のあるデータを挿入するのは非常に簡単なので、この方法を使用せず、それを示唆するPHPチュートリアルの使用を中止する必要があります。/<script>...whatever.php

于 2012-12-30T18:27:40.573 に答える
26

HTMLに任意の変数を挿入する場合、ブラウザに変数自体をHTMLとして解釈させない限り、その変数で使用するのが最適htmlspecialchars()です。特に、ハッカーがページに任意のHTMLを挿入するのを防ぎます。

の値は$_SERVER['PHP_SELF']、ブラウザに入力されたURLから直接取得されます。したがって、なしhtmlspecialchars()で使用すると、ハッカーがコードの出力を直接操作できるようになります。

たとえば、私があなたにリンクを電子メールで送信しhttp://example.com/"><script>malicious_code_here()</script><span class="、あなたが持っている<form action="<?php echo $_SERVER['PHP_SELF'] ?>">場合、出力は次のようになります。

<form action="http://example.com/"><script>malicious_code_here()</script><span class="">

私のスクリプトが実行され、あなたは賢くなりません。ログインしている場合は、Cookieを盗んだか、ページから機密情報を取得した可能性があります。

ただし、を使用した場合<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) ?>">、出力は次のようになります。

<form action="http://example.com/&quot;&gt;&lt;script&gt;cookie_stealing_code()&lt;/script&gt;&lt;span class=&quot;">

フォームを送信すると、奇妙なURLが表示されますが、少なくとも私の邪悪なスクリプトは実行されませんでした。

一方、を使用<form action="">した場合、リンクに何を追加しても出力は同じになります。これは私がお勧めするオプションです。

于 2014-09-06T18:03:04.983 に答える
11

質問が2年前であることは知っていますが、それは私が探していたものの最初の結果でした。私は良い答えを見つけました、そして私は他のユーザーを助けることができることを願っています。

これを見てください

これを簡単に説明します。

  • ()で$_SERVER["PHP_SELF"]変数を使用します。htmlspecialchars

    `htmlspecialchars($_SERVER["PHP_SELF"]);`
    
  • PHP_SELFは、現在実行中のスクリプトのファイル名を返します。

  • ()関数は、htmlspecialchars特殊文字をHTMLエンティティに変換します。->XSSなし
于 2015-11-25T13:57:35.537 に答える
0

上記の回答に加えて、それを行う別の方法は、$_SERVER['PHP_SELF']または単に空の文字列を使用すること__DIR__です。
または
、より低いPHPバージョン(<5.3)を使用している場合、より一般的な代替手段は次の方法を使用することです。dirname(__FILE__)
どちらも、コンテキスト内のファイルのフォルダ名を返します。

編集
Boannが指摘したように、これはファイルのディスク上の場所を返します。理想的にはURLとして公開しないでしょう。その場合dirname($_SERVER['PHP_SELF'])、コンテキスト内のファイルのフォルダ名を返すことができます。

于 2013-08-25T23:17:48.663 に答える
-4

違いはありません。$ _SERVER ['PHP_SELF']を使用すると、実行時間が0.000001秒ほど遅くなります。

于 2012-12-30T20:54:34.930 に答える