いくつかの奇妙な状況で、アクションフォーム属性で PHP_SELF を参照せずに、自己送信と思われることを行っていたことに気付きました。
私は困惑しています、私たちはどちらかを使用できますか
<?php echo filter_var($_SERVER['PHP_SELF'], FILTER_SANITIZE_STRING); ?>
または
action=""
?
そうでない場合、どのような状況で1つまたは別のものを検討する必要がありますか?
前もってありがとう、MEM
いくつかの奇妙な状況で、アクションフォーム属性で PHP_SELF を参照せずに、自己送信と思われることを行っていたことに気付きました。
私は困惑しています、私たちはどちらかを使用できますか
<?php echo filter_var($_SERVER['PHP_SELF'], FILTER_SANITIZE_STRING); ?>
または
action=""
?
そうでない場合、どのような状況で1つまたは別のものを検討する必要がありますか?
前もってありがとう、MEM
(PHP_SELF または空の文字列) のいずれかを使用できます。しかし、なぜこれに FILTER_SANITIZE_STRING を使用するのでしょうか? この場合、filter_var の代わりにhtmlentities()を使用することをお勧めします。パスにフィルター処理された文字 (例: <) が含まれていると、フォームは送信されません。
私は文字列を与えることを好みますが、<base href=>空の値を使用すると問題が発生する可能性があります。例:
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']);?>" method="post">
</form>
私が間違っていなければ、Safari には後者の問題があった/あったため、使用をやめました。
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