ホワイトリスト登録の防止、クロスサイト-スクリプティングと大量破壊兵器制御アプリケーション

StackOverflow https://stackoverflow.com/questions/2104520

質問

があるのに問題ないということ。これは私の最初の時間のようなことは、どんなだいすべてのリスク等異なる。

を使って大量破壊兵器へのユーザー入力、表示で文字通ります。ですのでuneditableを一度入力します保存のHTMLおよび、値下げ,

input = Server.HTMLEncode(stringThatComesFromWMDTextArea)

し、次のようなタグを付けたいユーザーが利用します。

// Unescape whitelisted tags.
string output = input.Replace("&lt;b&gt;", "<b>").Replace("&lt;/b&gt;", "</b>")
                     .Replace("&lt;i&gt;", "<i>").Replace("&lt;/i&gt;", "</i>");

編集 ここではないということは現在:

 public static string EncodeAndWhitelist(string html)
 {
     string[] whiteList = { "b", "i", "strong", "img", "ul", "li" };
     string encodedHTML = HttpUtility.HtmlEncode(html);
     foreach (string wl in whiteList)
         encodedHTML = encodedHTML.Replace("&lt;" + wl + "&gt;", "<" + wl + ">").Replace("&lt;/" + wl + "&gt;", "</" + wl + ">");
     return encodedHTML;
 }
  1. まこんなことしていますここで、私から保護されて クロスサイト-スクリプティング?
  2. その他の考慮点 すべきますか?
  3. あのリストは通常 タグwhitelist?
役に立ちましたか?

解決

あなたの要件は本当にあなたがこのような単純な文字列置換を行うことができ、その基本的なされている場合は、 [はい、これはXSSに対する「安全」です。 (ただし、それは<i><b>が誤ネストされたか、閉じられていない、ページアップしたコンテンツが終了まで潜在的に混乱が挿入可能性がある非整形式のコンテンツを提出することは可能です。)

しかし、これはまれで十分です。例えば、現在<a href="...">または<img src="..." />が許可されていません。あなたが属性値を持つこれらまたは他のマークアップを許可したい場合は、行うには全体の多くの仕事を持っていると思います。その後、正規表現でそれに近づくかもしれないが、それはどのように正規表現を解析HTMLことができず、そのよう見て、あなたは既に交換したコンテンツの偶発ネスティングと交換して無限の問題を与えています。

両方の問題を解決するために、通常のアプローチは、[X]を使用することです[HT]入力のMLパーサし、[X]に、最終的に再シリアライズ、全てが、正常な要素や属性削除DOMを歩きますHTML。その結果は整形保証と唯一の安全なコンテンツが含まれてます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top