サーバー変数をページにエコーするときに、すべてのベースをセキュリティでカバーしましたか?

StackOverflow https://stackoverflow.com/questions/613680

  •  03-07-2019
  •  | 
  •  

質問

常に使用してきたフォームで

<form method="post" action="<?php echo strip_tags($_SERVER['REQUEST_URI']); ?>">

フォームを自分自身に送信させる。

誰かがリンクする場合にstriptags()を使用します:

http://www.mysite.com/page-with-form.php?bla="><script src="http://www.nasty.com/super-nasty.js"></script><a href="#

XSS攻撃から保護するためにすべてのベースをカバーしましたか?または、より多くのホワイトリストアプローチ、たとえば英数字、スラッシュ、疑問符、等号、括弧などのみを許可する正規表現を使用する必要がありますか?

ありがとう!

役に立ちましたか?

解決

htmlspecialcharsの代わりに strip_tags を使用します。

他のヒント

同じスキーマ/ホスト/パスを参照する場合は、単純なアクション= <!> quot;?<!> quot;十分です。 http://tools.ietf.org/html/rfc3986#section-4.2

relative-ref  = relative-part [ "?" query ] [ "#" fragment ]

      relative-part = "//" authority path-abempty
                    / path-absolute
                    / path-noscheme
                    / path-empty

有効な相対URIです。

これに送信することにより、フォームを自分自身に送信します:

$_SERVER["PHP_SELF"]

そのグローバル変数は現在のページを出力します。理由がない限り、クエリ文字列全体を一緒に必要としますか?

編集

VolkerKのコメントで指摘されているように、PHP_SELFでも脆弱であるため、<=>に基づいて独自の小さな変数を記述し、ページの一部ではないことがわかっているURIの残りを展開できます。 。このようなもの:

$file_ext = '.php'; //knowing what file extension your URI is
$page_on = $_SERVER["PHP_SELF"]; //grab this page, with all that junk
$page_huh = explode($file_ext, $page_on); //blow it apart based on file ext
$page_on = $page_huh[0].$file_ext; //attach the leg back onto the URI

echo $page_on;

striptags()がタグ(<!> quot; <!> lt; <!> quot;と<!> quot; <!> gt; <!> quotの間の文字のみを削除する場合、山括弧を含む) 、誰かが引き続きJavaScriptを挿入できます:

http://www.mysite.com/page-with-form.php?bla=" onsubmit="return function(){ /*nasty code here*/ }()" style="

HTML、Javascript、CSSのすべての可能なメタ文字(つまり、山括弧、括弧、中括弧、セミコロン、二重引用符、単一引用符など)をホワイトリストに追加します。

フォームを自分自身に送信する場合は、アクションを空のままにします。例:

<form action="" method="POST">
...
</form>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top