2

私はStackQL.netに取り組んでいます。これは、StackOverflowパブリックデータセットでアドホックなtsqlクエリを実行できる単純なWebサイトです。醜いですが(私はグラフィックデザイナーではありません)、機能します。

私が行った選択の1つは、投稿本文のコンテンツ全体をhtmlエンコードしたくないということです。このようにして、クエリの投稿からいくつかのフォーマットを確認できます。画像も読み込まれますが、大丈夫です。

<script>ただし、これによってタグもアクティブのままになるのではないかと心配しています。誰かがstackoverflowの回答に悪意のあるスクリプトを植え付ける可能性があります。彼らはすぐにそれを削除することさえできたので、誰もそれを見ることができません。人々が最初にアクセスしたときに試みる最も一般的なクエリの1つは単純なSelect * from postsものであるため、少しのタイミングで、このようなスクリプトが複数の人々のブラウザで実行される可能性があります。10月のデータエクスポート(間もなくリリースされることを願っています)に更新する前に、これが問題にならないことを確認したいと思います。

スクリプトタグだけがエンコードされるようにするための最良で最も安全な方法は何ですか?

4

6 に答える 6

3

目的に合わせてHTMLSanatize スクリプトを変更することもできます。特定の種類の HTML を表示できるようにするために、Jeff Atwood によって作成されました。これは Stack Overflow 用に作成されたものであるため、目的にも適合します。

Jeff が現在展開しているものと「最新」かどうかはわかりませんが、出発点としては適切です。

于 2009-09-29T13:48:59.553 に答える
2

onclick、、など、または javascriptを忘れないでくださいonmouseover: puedo-urls ( <img src="javascript:evil!Evil!">) または CSS ( style="property: expression(evil!Evil!);") または…</p>

単純なスクリプト要素を超えた多くの攻撃ベクトルがあります。

ブラック リストではなく、ホワイト リストを実装します。

于 2009-09-29T13:44:21.030 に答える
1

メッセージが XHTML 形式の場合は、XSL 変換を実行し、不要なタグとプロパティをエンコード/削除できます。TinyMCE や CKEditor などを使用して、XHTML を出力する wysiwyg エディターを提供すると、少し簡単になります。

于 2009-09-29T13:45:04.333 に答える
0

<script>単にタグを壊すのはどうですか?<そのタグのみをエスケープし、最終的>に で終わるのは&lt;script&gt;、単純で簡単な方法の 1 つです。

もちろん、リンクは別のベクトルです。href='javascript:'のすべてのインスタンスと、* で始まるすべての属性も無効にする必要がありますon

念のため、軌道から核攻撃してください。

于 2009-09-29T13:45:03.390 に答える
0

<scriptしかし、これでもタグがアクティブなままになるのではないかと心配しています。

ああ、それはクロスサイト スクリプティングを引き起こす可能性のある HTML の「悪意のあるコンテンツ」の始まりにすぎません。イベント ハンドラーもあります。インライン、埋め込みおよびリンクされた CSS (式、動作、バインディング)、Flash およびその他の埋め込み可能なプラグイン、サイトを悪用するための iframe、javascript:およびその他の危険なスキーム (あなたが思っている以上にたくさんあります!) は、URL、メタリフレッシュを受け入れることができるすべての場所にあります。 、UTF-8 オーバーロング、UTF-7 ミススニッフィング、データ バインディング、VML およびその他の HTML 以外のもの、寛容なブラウザによってスクリプトとして解析される壊れたマークアップ...

要するに、単純な正規表現で HTML をサニタイズしようとするクイックフィックスの試みは、ひどく失敗します。

HTML がプレーン テキストとして表示されるようにすべてをエスケープするか、完全なパーサーとホワイトリスト ベースのサニタイザーを使用します。(そして、最新の状態に保ちます。それも大変な作業であり、新たに発見された穴があることが多いためです。)

しかし、SO 自体と同じ Markdown システムを使用して投稿をレンダリングしていませんか? それは当然のことでしょう。Markdown にクロスサイト スクリプティングを可能にする穴がないことを保証することはできません (確かに過去にはありましたが、かなり複雑なシステムであるため、まだいくつかのあいまいな穴が存在する可能性があります)。しかし、少なくとも、SO ほど不安になることはありません。

于 2009-09-29T14:05:09.483 に答える