形成身份验证安全风险

时间:2009-09-15 09:25:44

标签: c# .net asp.net iis-7

我使用的是VSTS 2008 + C#+。Net 3.5 + IIS 7.0 + ASP.Net。在我对Forms身份验证的理解中,会话变量(用于身份验证标识符 - 即用户通过身份验证时,用户将拥有此类会话变量,并且会话变量被实现为cookie)是为经过身份验证的用户建立的。 / p>

我对此模式的关注是,每次用户访问网站中的页面时,会话变量都将传输到服务器端。它可能被黑客窃取,黑客可以使用这样的会话变量假装成最终用户?这是安全隐患吗?

如果存在安全风险,那么我们必须始终使用https进行Forms身份验证吗?

提前谢谢, 乔治

5 个答案:

答案 0 :(得分:3)

用户的会话ID 用作身份验证Cookie的一部分 - 身份验证Cookie,会话Cookie是独立的。因此,如果您网站的某些部分需要身份验证,那么会话ID就不足以进入。

话虽如此,如果黑客嗅探流量,那么他们也会看到身份验证cookie,因此可以重新创建两者。

答案 1 :(得分:2)

您可以参考此question获取更多信息。这是一种潜在的安全风险,为了提供真正安全的连接,您必须使用HTTPS。

答案 2 :(得分:2)

是的,可以通过嗅探流量来窃取会话ID,因此使用会话进行识别存在安全风险。它通常被认为对非关键站点足够安全,但如果你有一个安全性至关重要的站点(banking,et.c),你需要使用SSL足够安全。

答案 3 :(得分:2)

我对我们的合作伙伴的请求有类似的担忧...... (详见此处:https://stackoverflow.com/questions/1367574/rewriting-urls-using-reverse-proxy

事实证明,这个“合法”的过程实际上是使用一种称为“中间人”的黑客攻击方法。它在技术上假装成为用户,在处理服务器时保持cookie ID在自己的会话上下文中,并为客户端计算机保留一个sparate。

因此,从理论上讲,它可以完成而且是一种威胁。如果数据以任何方式敏感,使用SSL是我认为的正确方法。


在此微软支持文章http://support.microsoft.com/kb/910443中有趣的是,这句话让您相信每个请求实际上都是相同的......

表单身份验证cookie只是表单身份验证票证的容器。故障单作为每个请求的表单身份验证cookie的值传递,并由服务器上的表单身份验证使用,以标识经过身份验证的用户。

可以使用3DES加密对cookie进行加密。可以通过将protection属性设置为web.config文件的身份验证部分的 Validation 来启用此功能。使用此设置,服务器将验证每个事务的cookie上的数据。 这虽然增加了一点开销......

答案 4 :(得分:0)

是的!只需确保在web.config表单标记

上添加:requireSSL =“true”
<authentication mode="Forms">
    <forms loginUrl="~/Account/LogOn" timeout="2880" requireSSL="true" />
  </authentication>

然后,您还可以使用一些重写来确保在需要身份验证的页面或目录上使用https。在MVC上,您可以使用[RequireHttps]过滤器属性。

      <rewriteMap name="SSL_Required_pages" defaultValue="">
        <add key="/simulacao-seguro-automovel.aspx" value="/simulacao-seguro-automovel.aspx" />
      </rewriteMap>
      <rule name="Enforce SSL pages">
        <match url="(.*)" />
        <conditions>
          <add input="{SSL_Required_pages:{HTTP_URL}}" pattern="(.+)" />
          <add input="{HTTPS}" pattern="off" />
          <add input="{HTTP_HOST}" pattern="mysite\.com" />
        </conditions>
        <action type="Redirect" url="https://mysite.com/{R:1}" redirectType="Permanent" />
      </rule>
      <rule name="Enforce SSL to secure directories">
        <match url="(.*)" />
        <conditions>
          <add input="{PATH_INFO}" pattern="^/admin/|^/admin|^/fale-conosco/|^/fale-conosco" />
          <add input="{HTTPS}" pattern="off" />
          <add input="{HTTP_HOST}" pattern="mysite\.com" />
        </conditions>
        <action type="Redirect" url="https://www.mysite.com/{R:1}" redirectType="Permanent" />
      </rule>