0

HTMLコードから削除する必要のある入力文字列があるため、デフォルトの.Net関数.HtmlEncode()を使用して、すべての危険な文字をエスケープします。

ここで、入力文字列のURLを、正規表現を介してHREFアンカーに置き換えようとしています。

問題は、.HtmlEncode()を呼び出す前にURLを「リンク」すると、アンカータグが失われることです。これは論理的です。しかし、.HtmlEncode()を呼び出した後にlinkifyを実行すると、危険な文字が含まれているために一部のURLが不正な形式になりますか?

鶏が先か卵が先かという問題のようですが、どうすれば解決できますか?

例:

入力文字列:

See http://example.com/q=1&x=2

期待される結果:

See <a href="http://example.com/q=1&x=2">http://example.com/q=1&amp;x=2</a>

最初にHtmlEncodeを実行し、その後でLinkifyを呼び出します。

See <a href="http://example.com/q=1&amp;x=2">http://example.com/q=1&amp;x=2</a>

最初にLinkifyを実行し、その後にHtmlEncodeを呼び出します。

See &lt;a href=&quot;http://example.com/q=1&amp;x=2&quot;&gt;http://example.com/q=1&amp;x=2&lt;/a&gt;

私が現在使用している解決策は、正規表現(linkify)で見つかったすべての一致に対して.HtmlDecode()を呼び出すことですが、有効なURLには理論的には&amp;デコードされるようなパターンが含まれている可能性があるため、100%確実ではありません。 。

4

3 に答える 3

0

正規表現の置換ではこれを行うことはできません。urlencode を介して href 属性を実行し、htmlencode を介してリンク テキストを実行する必要があります。

于 2011-11-10T18:49:29.953 に答える
0

これは、クロスサイト スクリプティング攻撃が発生するのを待っているようです。

Google へのリンクをテストします。

ユーザー入力を HTML マークアップに変換する私が見たほとんどのアプローチは、これを達成するためにある種の「予約された」カスタム非 HTML シーケンスを使用します。

[Test link to google.][1]    

  [1]: http://www.google.com

他のリッチ UI インターフェースも同様のことを行います。HTML ではありませんが、解析され、後で HTML として出力されます。このアプローチがあなたのケースでうまくいくかどうかはわかりませんが、価値があるかもしれません。一般に、誰かを信頼しない限り、生の HTML をアプリケーションに入力する機能を誰かに与えることは避けたいと考えています (そして、その一部を HtmlEncoding しているため、本当に信頼していないように見えます)。

于 2011-10-30T13:23:36.397 に答える
0

通常のテキストとリンクを別々に扱う必要があります。したがって、最初に入力を部分に分割します。

If you don't believe me that 1 < 2, see http://example.com/q=1&x=2

2 つのメンバーを持つコレクションになります。

{ "If you don't believe me that 1 < 2, see ", "http://example.com/q=1&x=2" }

最初のものをエンコードし、リンクのテキストのみをエンコードして、2 番目のものからリンクを作成します。

{
    "If you don't believe me that 1 &lt; 2, see ",
    "<a href=\"http://example.com/q=1&x=2\">http://example.com/q=1&amp;x=2</a>"
}

次に、結果を最終結果に結合します。

しかし、HTML を生成するために作成されたライブラリを使用した方が良いかもしれません。必要に応じて、Html Agility Packまたは ASP.NET のいずれか。

于 2011-10-30T13:54:14.413 に答える