私のモデルのプロパティのいくつかはAllowHtml属性でマークされています。これらのフィールドにAntiXss保護(つまり、フィルタのみ許可されたタグ)を自動的に適用する方法はありますか?AntiXssの保護Htmlのモデルのプロパティ
10
A
答えて
4
自動的な方法はありません。一番近いのは、AntiXss Nugetパッケージを入手することです。次に、あなたのコントローラで、以下のようにそれを使用することができます:
Microsoft.Security.Application.Sanitizer.GetSafeHtml("YourHtml");
OR
Microsoft.Security.Application.Encoder.HtmlEncode("YourHtml");
を使用する場合は、
Server.HtmlDecode("HtmlEncodedString");
を使用して、それをデコードすることができ、この情報がお役に立てば幸いです。
10
まず、afaik、何もそれのために組み込まれていません。 しかし、MVCは、あなたの
public class CustomAntiXssAttribute : Attribute { }
を定義し、それをあなたの特性を飾る(および必要に応じてさえAllowHtmlAttribute
から継承する)ことができ、カスタムModelBindersを経由して簡単にそのようなことを行うことができます。次に、モデルとあなたが特定の抗XSS保護を追加することができ、バインダー:
public class CutstomModelBinder : DefaultModelBinder
{
protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor)
{
if (propertyDescriptor.Attributes.OfType<CustomAntiXssAttribute>().Any())
{
var valueResult = bindingContext.ValueProvider.GetValue(propertyDescriptor.Name);
var filteredValue = SOME_CUSTOM_FILTER_FUNCTION_HERE(valueResult.AttemptedValue);
propertyDescriptor.SetValue(bindingContext.Model, filteredValue);
}
else // revert to the default behavior.
{
base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
}
}
}
その後、そのSOME_CUSTOM_FILTER_FUNCTION_HERE
の内側にあなたは@Yogirajが提案したものを使用、または正規表現を使用し、あるいはHtmlAgilityPackベースのフィルタリングを適用することができます。
P.S. 、(私は忘れてしまった:))
0
未テストコードのApplication_StartにModelBinders.Binders.DefaultBinder = new CutstomModelBinder();
を追加することを忘れないでください
public class ADefaultModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (bindingContext.ModelMetadata.RequestValidationEnabled)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName).AttemptedValue;
value = value.Replace("&", "");// replace existing & from the value
var encodedValue = Microsoft.Security.Application.Encoder.HtmlEncode(value);
bindingContext.ModelMetadata.RequestValidationEnabled = encodedValue.Contains("&"); // Whether AntiXss encoded a char to &..
}
return base.BindModel(controllerContext, bindingContext);
}
}
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
ModelBinders.Binders.DefaultBinder = new ADefaultModelBinder();
1
私はRegularExpression
データアノテーション検証と属性AllowHtml
それらを置き換えるために行くだろう。利点は、この方法でエラーをトラップし、前者がエラーをグローバルレベルで発生している間に何がうまくいかなかったかをユーザーに示すことができます。
例:
public class MyViewModel
{
[DataType(DataType.MultilineText)]
[RegularExpression(@"^[^\<\>]*$", ErrorMessage = "May not contain <,>")]
public string Text { get; set; }
}
関連する問題
- 1. Laravelモデルのプロパティを保護する方法
- 2. 私のHTMLのdiv保護
- 3. 保護されたプロパティPHP
- 4. Codeigniterとhtmlファイル保護(htaccess?)
- 5. パスワードの保護フォームの保護
- 6. Word文書の保護/保護解除
- 7. ホワイトリストのIFrameは、 YouTube with AntiXSS
- 8. TinyMCE、AntiXSS、MVC3、GetSafeHtmlFragment
- 9. アングルアプリケーションの保護
- 10. ソースコードの保護
- 11. csrfの保護
- 12. レストエンドポイントの保護
- 13. Javascriptの保護
- 14. エンティティオブジェクトのプロパティを保護するためのベストプラクティス(Entity Framework 6.0)
- 15. PHPのオブジェクトの保護プロパティ値を取得する方法
- 16. gtmetrix APIの保護されたプロパティにアクセスする方法
- 17. Laravel-のDataTable保護
- 18. Nginxのパスワード保護
- 19. パスワードアプリケーションの保護ボタン
- 20. ソースコードの保護セクション
- 21. SQLインジェクションの保護?
- 22. PHPコードの保護
- 23. 保護の原則
- 24. マルチプラットフォームのデータ保護
- 25. webappのジオロケーションスプーフィング保護
- 26. アンドロイドアプリケーションのアンインストール保護
- 27. Codeigniter XSSの保護
- 28. IdentityServer4のCSRF保護
- 29. * - Bibaモデルのプロパティ
- 30. Djangoモデルのプロパティ
YOUは "ITはシールクラスの" ALLOWHTMLATTRIBUTEを継承することはできません – VJAI