小编mko*_*man的帖子

在 ASP.Net Webforms 中防止 XSS:为什么验证请求还不够?

我正在寻找保护我们的网站免受 XSS 攻击的方法。在这一点上,我只关心消毒/保护输入。我知道需要对输出进行编码,但这超出了这个问题的范围。

需要牢记以下几点:

  • 我的网站根本不接受用户生成的 HTML。
  • 我已将验证请求设置为 true。

我知道 Microsoft建议不要只依赖 Validate Request。但是,我想知道为什么。开始输入消毒项目将涉及大量的时间和金钱,我需要向业务证明这些。

我一直在研究如何攻击验证请求保护的实际示例。我想出的就是这个。但是,我一直无法在我的网站上重现它。

security xss webforms

7
推荐指数
1
解决办法
9580
查看次数

在 C# 中验证列表

我们正在使用DataAnnotations来验证我们的模型。

我们模型的一个非常简化的版本是:

public class Model
{
    public List<Thing> Things;
}

public class Thing
{
    [Required]
    public string Name {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

现在,有趣的是,如果我创建一个Thing没有名称的并将其添加到模型中,我希望验证失败,但它通过了(震惊!)。

var model = new Model ();
var invalidThing = new Thing (); // No name would fail validation
model.Things.Add(invalidThing );

var validationContext = new ValidationContext(model);
var validationResults = new List<ValidationResult>();
var isValid = Validator.TryValidateObject(model, validationContext, validationResults, true);

Assert.False (isValid);  // This fails!
Run Code Online (Sandbox Code Playgroud)

认为这样做的原因是当您验证模型时,它会验证每个属性,但如果它是一个集合,则不会验证属性中的项目。Things是一个没有验证的属性,所以它通过了(尽管它包含无效项目)。

我们如何确保验证也验证集合属性中的项目?我可以使用一些开箱即用的验证器吗?

c# validation data-annotations

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×1

data-annotations ×1

security ×1

validation ×1

webforms ×1

xss ×1