Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 验证验证验证cookie是否由当前会话生成_Asp.net_Asp.net Mvc_Security_Cookies_Session Cookies - Fatal编程技术网

Asp.net 验证验证验证cookie是否由当前会话生成

Asp.net 验证验证验证cookie是否由当前会话生成,asp.net,asp.net-mvc,security,cookies,session-cookies,Asp.net,Asp.net Mvc,Security,Cookies,Session Cookies,我有一个ASP.NETMVC应用程序。在这个应用程序中,用户启动一个由电子邮件提供的URL,其中包含一个带有一些加密参数的令牌。例如,其中一个参数是移动电话号码 然后,应用程序使用自定义安全逻辑将4位代码作为SMS发送到附加的移动电话号码 此时,用户将看到一个屏幕,要求输入4位代码。在后台,ASP.NET在用户浏览器上设置了ASP.NET\u会话IDcookie。这是标准的ASP.NET功能,可在第一次请求时提供 用户输入4位代码并确认正确后,HTTP响应将设置ASPXAUTHcookie 这一

我有一个ASP.NETMVC应用程序。在这个应用程序中,用户启动一个由电子邮件提供的URL,其中包含一个带有一些加密参数的令牌。例如,其中一个参数是移动电话号码

然后,应用程序使用自定义安全逻辑将4位代码作为SMS发送到附加的移动电话号码

此时,用户将看到一个屏幕,要求输入4位代码。在后台,ASP.NET在用户浏览器上设置了
ASP.NET\u会话ID
cookie。这是标准的ASP.NET功能,可在第一次请求时提供

用户输入4位代码并确认正确后,HTTP响应将设置
ASPXAUTH
cookie

这一切都很好。然而,有人提出了一个安全问题。一种旁路技术已经浮出水面:

  • 有两个不同的应用程序URL,URL A和URL B
  • 启动URL A。这将为攻击者提供
    ASP.Net\u会话ID A
  • 启动URL B。然后输入已知的4位代码。这将为攻击者提供
    ASP.Net_SessionId B
    ASPXAUTH B
  • 然后,攻击者可以通过使用GET请求中的
    ASPXAUTH B
    cookie获取经过身份验证的页面,绕过URL A上的安全代码屏幕
  • 虽然这不是一个很大的问题,因为这里需要大量的片段才能成功地发挥作用,但这里有一个问题:在任何给定的HTTP请求中,我们如何确认传递的
    ASPXAUTH
    cookie是由传递的
    ASP.Net\u SessionId
    生成的?


    凭直觉,我找到了一个相当粗糙的解决方案,通过该解决方案,您可以将
    ASPXAUTH
    的值存储在用户的会话对象上,然后在每个请求上进行比较有更聪明的方法吗?

    您正在处理身份验证与授权的问题。拥有有效的ASP.NET会话并不能确保您知道用户是谁。有很多方法可以做到这一点,简而言之,您需要在应用程序的会话中验证用户的身份


    确实,拥有有效的ASP.NET会话并不能确保您知道用户是谁。但是,这只适用于经过身份验证的用户。如果认证cookie被认为是完全独立的实体,并且它要么有效,要么无效。攻击者将有效的身份验证令牌与任何有效的会话令牌组合在一起的行为。我在这里推荐的解决方案是否无效,或者我是否完全遗漏了什么?如果攻击者泄露了有效的会话cookie,则所有赌注都将被取消。你无能为力。