我现在正在学习ASP.NET核心开发的概念,在我的学习过程中,我从以下article中发现,需要保护网页免受未经授权的访问,以便从跨站点请求伪造中获得保护攻击。
我已经遵循了几个教程和我自己的(学习)应用程序:
[Authorize]
装饰器(在我的例子中是API控制器)POST
,UPDATE
方法中,我已调用if (ModelState.IsValid)
调用以检查是否已通过参数我有以下三个问题:
1)这种方法是否足以保护我的网站?作为一种身份验证方法,我使用简单的CookieAuthentification
。换句话说(因为这可能是一个过于宽泛的问题),这种方法是否正确地使可能的攻击者感到沮丧?
2)在我当前的设置中(使用ViewModels而不是真实模型)需要[ValidateAntiForgeryToken]
吗?如果是的话,它的用途是什么?
3)现在问题(我最感兴趣的)是关于ViewModels。 ViewModels如何保护我的网站免受未经授权的攻击?我明白在我的ViewModel中我只能公开我希望用户有权访问的变量/属性(并隐藏其余的),但是当我仍然需要公开我的ID(主键)时,它如何保护我的网站(因为没有ID,我无法想象如何做例如DELETE / UPDATE调用)?
由于我还在学习这门课程,所以对此事的任何帮助都会受到更多的赞赏。
答案 0 :(得分:1)
网站安全性是一个复杂的问题。应实施与需要保护的数据的敏感性相称的保护措施。
1)某些级别的身份验证对于防止匿名攻击是必要的,攻击者可以通过无数次尝试来获得成功的攻击。</ p>
2)任何数据更改都需要[ValidateAntiForgeryToken]。如果没有它,您可以让用户成功通过身份验证并获得有效的cookie,然后被恶意行为者窃取,该恶意行为者已经破坏了您的有效用户使用的浏览器,并使用该被盗cookie来进行不必要的数据更改。 / p>
3)使用ViewModels意味着您没有向数据库公开直接数据调用。是的,恶意行为者可能会以不合需要的方式修改数据,但仍限于数据层范围内的更改。如果没有ViewModel,攻击者可能会通过SQL注入进行您从未想过的更改。如果您使用的是ORM,例如Entity Framework,那么SQL注入的可能性就会降低。