防止跨站点请求伪造攻击

Protecting from cross-site request forgery attacks

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

我已经学习了几个教程,对于我自己的(学习)应用程序,我有:

我有以下三个问题:

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

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

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

在这件事上的任何帮助将不胜感激,因为我仍在学习这个主题。

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

1) 一定程度的身份验证对于防止匿名攻击是必要的,在匿名攻击中,攻击者将进行无限次尝试才能成功攻击。

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

3) ViewModels 的使用意味着您没有暴露对数据库的直接数据调用。是的,恶意行为者可能会以不良方式修改数据,但仍仅限于数据层范围内的更改。如果没有 ViewModels,攻击者可能会通过 SQL 注入做出你从未想过的改变。如果您使用的是 Entity Framework 之类的 ORM,则 SQL 注入的可能性较小。