忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/11/23 22:50 |
OREDON『今更phpでオブジェクト指向プログラミング応用その3 BBSを作る』の感想
http://oredon.yuipyong.com/blog/2014/03/phpbbs.php

とりあえず「,」が勝手に削除される残念仕様。
せっかくfputcsv()やらserialize()やらがあるんだから、自力パースなんぞせずに標準関数に任せるべき。

さて、本題はここからで、このフォームにはXSSが存在します。
『res=1&parent_no=<script>alert("a");</script>』
をPOSTすると見事にアラートが出ます。
まあChromeだとXSS Auditorに止められますが。
何なんですがねXSS Auditor。
こんなのがあると却って危ない気がしますがどうでしょう。

原因はsprintfの引数に%sを使っているせいですが、もっと根本的な原因としては出力を一切エスケープしていないせいです。
ん…?一切エスケープしていない?

普通にフォームに『<script>alert("a");</script>』って入れて投稿するだけでXSSになりました。
こっちはChromeでも出ます。
これはひどい。

もうひとつ深刻な問題があって、
『del=1&no=0』をPOSTすると全投稿が消えます。
実際は返信についてだけはデータ上に残っているのですが、表示されることはありません。
これは、全ての親記事が内部的にはNo0への返信という形式になっているためです。
削除ボタンは、自分の記事番号もしくは親の記事番号がリクエスト値であれば削除する、という処理になっています。
そのため削除する記事番号に0を入れると全投稿が消えます。

まあ、そもそもそれ以前に認証の一切存在しない削除ボタンなので、いくらでも好きに消せてしまうのですが。


http://oredon.yuipyong.com/blog/2014/02/phptweet.php

> header('Location: ' . $_SERVER['PHP_SELF']);

あかん。

テキストファイルに保存する段階でhtmlspecialchars()しているのもおかしいですね。
エスケープは使用する直前です。
htmlspecialchars()で変形する前のテキストが欲しいなんてことになった場合、いちいちhtmlspecialchars_decode()する羽目になります。

あと$_COOKIEについては、個人的には一切使用する必要のない変数だと思っています。
ほぼ全ての状況において$_SESSIONで代替できますし、そのほうがより安全です。


http://oredon.yuipyong.com/blog/2014/02/php-2.php

特にセキュリティ的な問題は無いように思えますが、カウンター程度で3回もfopenするのはあんまり気持ちよくないな。
PR


2014/03/17 23:27 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<PHP5.6.0α PHPで累乗根を求める | HOME | 買ったものリスト 2014/03/16>>
忍者ブログ[PR]