ページに HTML 入力フィールドであるテキストエリアがあります。その意図は、特定のアクションが実行された後にユーザーのブラウザーに表示される確認 HTML をユーザーが登録できるようにすることです。これは、何かを支払った後にペイパルが承認され、「ご購入いただきありがとうございます」と書かれたウェブサイトにリダイレクトされることを想像することができます。これはすでに問題なく実装されていますが、現在、ユーザーのセキュリティ (XSS/SQL インジェクション) について考えています。
私が知りたいのは、特定の html タグを<script> <embed> <object>
コントローラーのポスト アクション内などで安全に除外する方法です。そのため、HTML 内に悪意のある html があることを検出した場合は、保存する前に実行を停止します。今、私はこのようにしています:
[CustomHandleError]
[HttpPost]
[ValidateAntiForgeryToken]
[AccessDeniedAuthorize(Roles = "Admin,CreateMerchant")]
public ActionResult Create(MerchantDTO merchantModel)
{
if (ModelState.IsValid)
{
if (!IsSafeConfirmationHtml(merchantModel.ConfirmationHtml))
{
ModelState.AddModelError("ConfirmationHtml", "Unallowed HTML tags inputted");
return View("Create", merchantModel);
}
.
.
.
}
}
私の IsSafeConfirmationHTML は次のように定義されています
private bool IsSafeConfirmationHtml(string html)
{
if (html.ToLower().Contains("<script") || html.ToLower().Contains("<embed") || html.ToLower().Contains("<object"))
{
return false;
}
return true;
}
これを行うためのよりスマートでクリーンな方法はありますか? つまり、「オブジェクト」、「スクリプト」などの単語をブロックする偽陽性を取得したくないのですが、「<」を「%3C」などに変換するエンコーディングにだまされたくありません。 ..
Ontopic : タグ内のスペーシングは機能しますか? 例: < script > alert("1"); < / script >
?