4

プラットフォーム:ASP.NET 4.0 MVC 4 C#jQuery

これが私がやりたいことです。

私は自分の製品のための簡単なフォーラムを構築しています。ユーザーに投稿やコメントを入力するためのテキスト領域を提供したいと思います。

  1. 基本的なテキストフォーマットのHTMLとリンクを許可したい-p、a、b、iなど
  2. 他のhtmlスタイリング(つまり、div、spanなど)は必要ありません。
  3. スクリプトへのアクセスは必要ありません

これを行うための賢い方法はありますか?たとえば、安全でないテキストを許可してサーバー側で調べることはできますが、正しくクリーンアップできず、セキュリティホールが開く可能性があるとは思えません。

できれば、頑丈なプラグインは避けたいと思います。

ありがとう!

(PS-私の最悪のフォールバックは、安全なテキストのみを許可することです。つまり、ASP.NETセキュリティをオンのままにして、リンクに特別なマークアップを使用します-[link] [b] [i]など)

4

4 に答える 4

1

どのようなアプローチを使用する場合でも、フィールドに入力されたものはすべて悪意のあるものであると想定する必要があります。つまり、データを信頼しないでください。

JavaScript/jQuery でのクライアントの検証については、あまり気にしません。複雑になり、サーバー側でやり直すだけで済みます。

ホワイトリスト アプローチを採用するサーバー側。つまり、リストにない場合は無効です。ユーザーのテキストが有効な XML にならない可能性があるため、XML プロセッサを使用することはできません。代わりに、おそらく正規表現を使用する必要があります。

有効なタグのセットを定義します (p、a、b、i と言いましたが、「野生の」html ではほとんど得られないので、最後の 2 つにはうんざりします)。これらのタグに有効な属性とその属性。少なくとも a に a href が必要だと思います。

一致しないタグ内のテキストを取り除くことができます...私の正規表現スキルは優れていませんが、これは保持したいすべてのタグを見つけるように見えます.反転する必要があります.

\<a\shref\=".[^\"]*\"\>|\</?[abip]\s?\>
于 2012-08-26T20:20:33.420 に答える
0

私は自分の意見を形成するのに役立ったので、ジョーサーの答えを「答え」とマークしました(彼が言ったことは私が最終的にしたことではありませんでしたが)

私は単純なルールを決めました - http://.... リンクをリンクし、他の html を禁止します (私のアプリケーションでは問題ありません)。このようにして、ASP.NET フレームワークにすべてのエラー チェックを実行させ、HTML マークアップを許可しません。次に、クライアントでテキストをレンダリングしたときに、マークアップで装飾することで http:// リンクのみを認識して変更し、他のすべてを HTML セーフ エンコーディングにしました。

于 2012-09-24T21:04:38.673 に答える
0

使用できるオンライン エディターはたくさんあります。Google に「オンライン テキスト エディター フリー」と入力し、多くのエディターにレビューしてもらいました。

マークアップで html を使用する必要がある場合は、送信されたテキストを解析して、「安全」ではないタグを見つけたときにそのテキストを拒否する必要があります。

参考までに、これはあなたにとって興味深いかもしれません https://meta.stackexchange.com/questions/121981/stackoverflow-official-wmd-editor

于 2012-08-26T21:59:17.377 に答える