防止跨站点请求伪造攻击

时间:2016-07-21 10:56:32

标签: c# entity-framework asp.net-core-mvc csrf csrf-protection

我现在正在学习ASP.NET核心开发的概念,在我的学习过程中,我从以下article中发现,需要保护网页免受未经授权的访问,以便从跨站点请求伪造中获得保护攻击。

我已经遵循了几个教程和我自己的(学习)应用程序:

  • 在我的控制器顶部实现了[Authorize]装饰器(在我的例子中是API控制器)
  • 在实际的POSTUPDATE方法中,我已调用if (ModelState.IsValid)调用以检查是否已通过参数
  • 使用ViewModels而不是在与网站(或本例中的API)通信时在数据库中使用的实际模型。

我有以下三个问题:

1)这种方法是否足以保护我的网站?作为一种身份验证方法,我使用简单的CookieAuthentification。换句话说(因为这可能是一个过于宽泛的问题),这种方法是否正确地使可能的攻击者感到沮丧?

2)在我当前的设置中(使用ViewModels而不是真实模型)需要[ValidateAntiForgeryToken]吗?如果是的话,它的用途是什么?

3)现在问题(我最感兴趣的)是关于ViewModels。 ViewModels如何保护我的网站免受未经授权的攻击?我明白在我的ViewModel中我只能公开我希望用户有权访问的变量/属性(并隐藏其余的),但是当我仍然需要公开我的ID(主键)时,它如何保护我的网站(因为没有ID,我无法想象如何做例如DELETE / UPDATE调用)?

由于我还在学习这门课程,所以对此事的任何帮助都会受到更多的赞赏。

1 个答案:

答案 0 :(得分:1)

网站安全性是一个复杂的问题。应实施与需要保护的数据的敏感性相称的保护措施。

1)某些级别的身份验证对于防止匿名攻击是必要的,攻击者可以通过无数次尝试来获得成功的攻击。<​​/ p>

2)任何数据更改都需要[ValidateAntiForgeryToken]。如果没有它,您可以让用户成功通过身份验证并获得有效的cookie,然后被恶意行为者窃取,该恶意行为者已经破坏了您的有效用户使用的浏览器,并使用该被盗cookie来进行不必要的数据更改。 / p>

3)使用ViewModels意味着您没有向数据库公开直接数据调用。是的,恶意行为者可能会以不合需要的方式修改数据,但仍限于数据层范围内的更改。如果没有ViewModel,攻击者可能会通过SQL注入进行您从未想过的更改。如果您使用的是ORM,例如Entity Framework,那么SQL注入的可能性就会降低。