(潜在的に敵対的な)ユーザー入力フィールドを処理するためのコントローラーメソッドには、次のコードがあります。
string tmptext = comment.Replace(System.Environment.NewLine, "{break was here}"); //marks line breaks for later re-insertion
tmptext = Encoder.HtmlEncode(tmptext);
//other sanitizing goes in here
tmptext = tmptext.Replace("{break was here}", "<br />");
var regex = new Regex("(<br /><br />)\\1+");
tmptext = regex.Replace(tmptext, "$1");
私の目標は、典型的な悪意のない使用のために改行を保持し、安全な html エンコードされた文字列でユーザー入力を表示することです。ユーザー入力を取得し、改行文字を解析して、改行に区切り記号を配置します。HTML エンコーディングを実行し、改行を再挿入します。(これを変更して、段落を br ではなく p タグとして再挿入する予定ですが、今のところ br を使用しています)
実際に実際の html ブレークを挿入すると、微妙な脆弱性に直面する可能性があります: Enter キーです。regex.replace コードは、エンター キーの上に立ってページをがらくたで埋めている悪意のあるユーザーを排除するためにあります。
これはただの白の大きながらくたフラッドの修正ですが、1 文字、2 つの改行、1 つの文字、2 つの改行をページ全体に入力するなど、悪用される可能性があります。
私の質問は、これが不正であると判断し、検証に失敗する方法です。それを行うための単純な手続き型の方法がなく、代わりにヒューリスティック手法またはベイジアンフィルターが必要になるのではないかと心配しています。うまくいけば、誰かがより簡単でより良い方法を持っています。
編集: おそらく、問題の説明が明確ではありませんでした。正規表現は、複数の改行が連続して表示され、それらを 1 つまたは 2 つに変換することを処理します。その問題は解決しました。本当の問題は、正当なテキストとがらくたフラッドを次のように区別することです。
a
a
a
...これらの 1000 を想像してみてください...
a
a
a
a