スポンサーリンク

PHPで、サーバ変数 $_SERVERのPHP_SELFを利用して、リンクを作るということはよくやると思います。

たとえば、こんな感じです。

<a href="<?php echo $_SERVER['PHP_SELF']; ?>">hoge</a>

[2008-01-31-1] で PHP_SELFと SCRIPT_NAME を比較しましたが、PHP_SELFを参照した場合、PHPのスクリプトファイルの後ろに続く文字列もPHPに渡ってしまいます。

これを何も考えずに、表示してしまうとセキュリティ上の問題が発生します。
どんな問題が発生するかというと、XSS(クロスサイトスクリプティング)です。

http://foo.bar.orz/dev/php/SCRIPT_NAME.php/%22%3E%3Cscript%3Ealert(0);%3C/script%3E
は、
http://foo.bar.orz/dev/php/SCRIPT_NAME.php/"><script>alert(0);</script>
の意味です。

$_SERVER['PHP_SELF']をechoで表示してしまうと
<a href="/dev/php/SCRIPT_NAME.php/"><script>alert(0);</script>">hoge</a>
となって、JavaScriptが実行することができます。

PHPのfilterモジュールでサニタイズしてみると
<a href="<?php echo(filter_input(INPUT_SERVER, 'PHP_SELF',
			FILTER_SANITIZE_STRIPPED)); ?>">hoge</a>
?>


<a href="/dev/php/SCRIPT_NAME.php/&#34;alert(0);">hoge</a>

となるわけです。

しかしながら PHP_SELF じゃなくて SCRIPT_NAME を使えば安心のように思えます。

というわけで、 PHP_SELF を撲滅したほうがいいかも、です。
findコマンドとgrepコマンドで、PHP_SELFを簡単に見つけられます。

find . -name "*.php" -exec fgrep PHP_SELF {} \;
find . -name "*.inc" -exec fgrep PHP_SELF {} \;
参照しているページ (サイト内): [2013-02-06-1]

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

はてなの人気のブックマーク

スポンサーリンク
 

過去ログ

2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー