用户点击恶意链接时很容易受到攻击

时间:2019-05-23 10:17:05

标签: c# asp.net security authentication session-cookies

我正在尝试了解安全的登录身份验证。以下链接中提供了用于实现登录功能的代码。 (在这种情况下,使用的是Guid,但在现实生活中,可以使用更好的机制)

https://github.com/GrepSecurity/SessionFixationExample/blob/master/SessionFixationExample/SecureLoginFunc/SecureLogin.aspx.cs

用户登录后,欢迎页面将在以下链接中提供代码以检查用户的真实性。 (这是我发现的用于验证用户身份验证的最常见代码)

https://github.com/GrepSecurity/SessionFixationExample/blob/master/SessionFixationExample/SecureLoginFunc/SecureLogout.aspx.cs

我在想一个失败的场景。考虑这种情况

  1. 受害者已登录
  2. 受害者将在服务器上创建2个会话变量。例如: Session [“ userLoggedin”] =“受害者” Session [“ AuthToken”] =“ GUID”
  3. 受害者将在其浏览器中创建一个cookie。例如: Cookie [“ AuthToken”] =“ GUID”
  4. 攻击者向受害者发送了恶意链接,该链接对其状态做了一些更改(发送朋友请求,删除用户,将受害者注销...。)。 让我们假设链接如下: www.somewebsite.com/Logout,这将注销用户。
  5. 受害人单击链接,得到身份验证,因为来自浏览器的cookie(即“ GUID”)被发送到服务器并针对会话变量进行了验证。
  6. 用户注销

我知道上述可能性没有严重影响,但是仍然可以避免这种情况吗?还是这是一个有效的方案?我想念什么吗?

这是我的问题

  1. 可以处理这种情况吗? (考虑到这是一个有效的方案)
  2. 我指的是安全代码吗?
  3. 此漏洞是什么?
  4. 如何缓解这种情况?

1 个答案:

答案 0 :(得分:0)

在此示例中,您提到这是另一种攻击情形(CSRF)。

CSRF的基本含义:攻击者代表受害者执行操作。该操作或该操作的原始请求将来自另一个站点。

要防御CSRF,您可能需要遵循OWASP指南。 (https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.md

但以您为例。假设您要保护名为Order的操作。 您的服务器上将生成一个令牌。然后,该令牌将被呈现或发送给客户端。 具有Post参数的有效请求看起来像www.somewebsite.com/Order Order=Something & Token="RANDOM_TOKEN"

此令牌将在执行此操作之前由服务器检查。

如果攻击者只是从另一个站点/域发起此请求,因为它已在客户端页面上呈现,那么攻击者将无法访问此令牌。

攻击者是否有可能访问此令牌?

是的,如果该应用程序容易受到(XSS)的攻击,则有可能。 攻击者可以使用JS命令使用JS命令将恶意链接发送给受害者,

  • 获取渲染的CSRF令牌。
  • 使用令牌执行操作。

尽管XSS经常窃取受害者的Cookie,但通常情况下。但是,如果将Cookie标记为HTTPOnly,则可能会发生CSRF攻击。