2011-06-09 12 views
0

私は、ユーザーが変更できるテキストエリアを持つPHPページを持っており、その値が別のPHPページに保存されて表示されます - これはXSS攻撃(または悪意のあるハッカーが今日使用しているもの) http://htmlpurifier.orgはXSS攻撃を避けるための素晴らしい解決策です。私は、テキストエリアに入力されたPHPコードがブラウザによって無視され、サーバーサイドでは実行されないというSOスレッドを読みます。私はちょうどhtmlpurifierが私のサイトを完全に保護するか、IE6のような古いブラウザがそれほどPHPコードを無視するほどスマートでない可能性があるかどうかを知りたいだけです。ありがとう:)ユーザーがテキストエリアにPHPコードを入力しないようにしますか?

私はアポストロフィとラインの書式設定の問題を回避するためにstripslashesとnl2brを使用しました。私は予期せぬディスプレイの問題を避けるために何かを使用しなければなりませんか?

答えて

7

出力にhtmlspecialchars()を使用するだけで、特殊文字はリテラルな意味を持たなくなり、ブラウザでは処理されません。

PHPコード自体はブラウザによって無視されます。ブラウザは、ちょうどいくつかの大きな奇妙な<?php ... '?>要素だと思うでしょう。

+0

技術的に、<?は、[処理](http://www.w3.org/TR/html4/appendix/notes.html#hB.3.6)[指示](http://www.w3 .org/TR/xml /#sec-pi)であり、要素ではありません。しかし、それはちょうど無意味なニトを拾うpedantryです:) –

+0

ありがとう、私はそれをチェック:)私はちょうどサーバーがユーザーが書いた ''タグの内部に何を実行しないのだろうと思っている - それはデータベースレコードを読み込み、それを '​​'にエコーします。私は、PHPファイル内にあったテキストとしてレコードの値を扱い、いつものように実行すると想像しました。これはちょうど不適切な考えであると言っていますか? – tylerl

+0

@tylerl文字列内のPHPコードは実行されません。 PHPの場合、文字列は単なる文字列です。 – alex

0

PHPコードはサーバーコードです。ブラウザにはPHPインタプリタが含まれていないため、ブラウザは実行しません。

+0

まあ、考えれば、PHP文書にはというタグがつくことになり、サーバーはタグ内にあるものを実行すると思います。何らかの理由でこれは真実ではありませんか? – tylerl

1

特にあなたの質問に答えるために...

いいえ、あなたは、ユーザーが入力したPHPコードを実行するブラウザを心配する必要はありません。これは通常、PHPスクリプトの中に「インクルード」するときに気にしなければならないことですが、それでも適切に構造化すれば、心配する必要はありません。これは、PHPがクライアント側(ブラウザ内)ではなく、サーバー側(Webサーバー上)で解釈されるためです。また、このタイプの攻撃は、XSSではなく、RFIまたはコードインジェクション(Googleにいくつかの言葉を言いたいのであれば)と一直線になるでしょう。

ストリップスラッシュは、(SQL攻撃などの潜在的な可能性がある)特定のものには役立ちますが、XSS攻撃の主な防御ではありません。

HTMLPurifier自身で実行していると、あなたは(など、あなたが正しくそれを設定提供する、)XSS攻撃に対して罰金になります

言ったこと、それは「ホワイトリストに対するユーザの入力をフィルタリングするために、常に最善のではなく、ブラックリストにしようとしています悪い '文字/入力。ユーザーがどのタイプのデータを入力できるようにしますか?普通のテキストですか? BBCode +テキスト? HTML?

+0

うわー、長い応答ありがとう!私は本当に彼らが少しスタイリング(太字や斜体のような)以外の何かを入力することを望んでいないと私はリンクもいいと思う。それはそれについてです...私は前にこのようなテキストボックスを設定しようとしたことはありませんし、私はそれらのためにそれをあまりにも困難にしたくありません...私はこれを設定することを考えています: http://www.themaninblue.com/ experiment/widgEditor/ 私はこのタイプのホワイトリストを適用できるかどうかわかりませんでした。太字、イタリック、リンクしか許さないものを私に見せてもらえますか?それに応じてwidgEditorを設定し、HTML Purifierを設定するために最善を尽くす:)ありがとう! – tylerl

関連する問題