2

いくつかの奇妙な状況で、アクションフォーム属性で PHP_SELF を参照せずに、自己送信と思われることを行っていたことに気付きました。

私は困惑しています、私たちはどちらかを使用できますか

<?php echo filter_var($_SERVER['PHP_SELF'], FILTER_SANITIZE_STRING); ?>

または

action="" 

?

そうでない場合、どのような状況で1つまたは別のものを検討する必要がありますか?

前もってありがとう、MEM

4

4 に答える 4

3

(PHP_SELF または空の文字列) のいずれかを使用できます。しかし、なぜこれに FILTER_SANITIZE_STRING を使用するのでしょうか? この場合、filter_var の代わりにhtmlentities()を使用することをお勧めします。パスにフィルター処理された文字 (例: <) が含まれていると、フォームは送信されません。

私は文字列を与えることを好みますが、<base href=>空の値を使用すると問題が発生する可能性があります。例:

<form action="<?php echo htmlentities($_SERVER['PHP_SELF']);?>" method="post">
</form>
于 2010-09-01T16:55:19.967 に答える
0

私が間違っていなければ、Safari には後者の問題があった/あったため、使用をやめました。

于 2010-09-01T16:54:58.360 に答える
-1

PHP_SELFは使用しないでください。これは、である可能性もあります/index.php/"><script>alert(1)</script>/

XSS攻撃によく使用されます。

代わりにインデックスSCRIPT_NAMEを使用してください!SCRIPT_NAMEは、ユーザー入力ではなく、常に実際のPHPファイルを指します。

よろしく

編集:

2人の人が、mod_rewriteを使用するとSCRIPT_NAMEが機能しないことを指摘しています。これは誤りであり、これらの人々は回答を投票する前に読む必要があると思います。

これがあなたのためのテストシナリオです***:

$ cat .htaccess 
RewriteEngine On
RewriteRule testme/ /testmenot.php

$ cat testmenot.php 
<? echo $_SERVER['SCRIPT_NAME']; ?>

$ GET hostname/testme/
/testmenot.php

$_SERVER['REQUEST_URI']は「/testme/」を保持しています。これは、これらの人々がSCRIPT_NAMEで期待していたと思います。しかし、それはPHP_SELFにもありません。

/ meが指を交差させる
:E

于 2010-09-01T16:56:12.273 に答える