Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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
C# 表单身份验证安全风险_C#_.net_Asp.net_Iis 7 - Fatal编程技术网

C# 表单身份验证安全风险

C# 表单身份验证安全风险,c#,.net,asp.net,iis-7,C#,.net,Asp.net,Iis 7,我使用的是VSTS2008+C++.NET3.5+IIS7.0+ASP.Net。在我对表单身份验证的理解中,为经过身份验证的用户建立了一个会话变量(用于身份验证标识符——即,当用户通过身份验证时,用户将拥有这样一个会话变量,并且该会话变量被实现为cookie) 我对这种模式的关注是,每次用户访问网站中的页面时,会话变量都会传输到服务器端。它可能被黑客嗅探,黑客可以使用这样的会话变量来假装是最终用户?这是安全风险吗 如果存在安全风险,那么我们必须始终使用https进行表单身份验证 提前感谢,, 乔

我使用的是VSTS2008+C++.NET3.5+IIS7.0+ASP.Net。在我对表单身份验证的理解中,为经过身份验证的用户建立了一个会话变量(用于身份验证标识符——即,当用户通过身份验证时,用户将拥有这样一个会话变量,并且该会话变量被实现为cookie)

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

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

提前感谢,,
乔治

你可以参考这篇文章了解更多信息。这是一个潜在的安全风险,为了提供真正安全的连接,您必须使用HTTPS。

是的,通过嗅探通信量可以窃取会话id,因此使用会话进行识别存在安全风险。一般认为,对于非关键站点来说,它是足够安全的,但是如果您有一个安全性非常关键的站点(银行等),那么您需要使用SSL来确保足够安全。

对于我们的一个合作伙伴的请求,我也有类似的担忧。。。 (详见此处:)

事实证明,这个“合法”的过程实际上使用了一种叫做“中间人”的黑客方法。在与服务器打交道时,它通过将cookie ID保存在自己的会话上下文中,并为客户端计算机保留一个备用的cookie ID,从技术上说,它假装是用户

因此,理论上这是可以做到的,也是一种威胁。在我看来,如果数据在任何方面都是敏感的,那么使用SSL是正确的方法


有趣的是,在这篇微软支持文章中,措辞让你相信每个请求实际上都是一样的

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

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

用户的会话ID没有用作身份验证cookie的一部分-身份验证cookie和会话cookie是分开的。因此,如果网站的某些部分需要身份验证,那么会话ID将不足以进入


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

是的!只需确保在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>


我想与您确认,每次使用初始化网站页面请求时,都将使用用于表单身份验证的相同会话变量?如果不总是相同(例如每次使用随机值),我认为可以。会话id是会话的id,而不是用户的id。当您打开浏览器并访问该站点时,每次都会获得一个新会话。会话在您上次请求后(默认情况下)在服务器上驻留20分钟,此后会话id不再有效,当您访问该站点时,您将获得一个新会话。黑客可以访问会话信息,但不能访问另一个cookie中的用户信息,这也会在浏览器请求中传递,并可能被黑客嗅探。@George2:是的,如果有人在正确的时间、正确的地点使用正确的设备,他们可以嗅探网络流量以获取cookie,并伪造请求以模拟会话。除非所有通信都加密(SSL),否则这总是有风险的。@George2:浏览器不会对cookie进行加密或加扰,您发送到浏览器的内容正是您得到的内容。如果浏览器对该值进行置乱,则该算法将被公开,因为服务器必须能够读取该值,因此它将毫无意义。此外,加扰值与未加扰值一样易于提取和重用,因此不会真正增加任何保护。我想与您确认,每次使用初始化网站页面请求时,都将使用用于表单身份验证的相同会话变量?如果它不是一直都是一样的(例如,每次都会使用一个随机值),我认为这很好。我不认为它一直都是一样的,但我会研究它。如果我是Microsoft,我会这样做。然而,这是值得检查的,因为即使是在最好的系统中也可能存在缺陷……我想我必须同意其他人的观点,即如果数据以任何方式敏感,最好的做法是使用SSL。SSL通过建立一种更安全的整体通信方式而具有额外的价值。如果它每次都改变,则没有什么区别,黑客只需要在合法用户之前使用这些信息。Robban提到了上面的另一篇文章,这篇文章为我们设法打开的这罐蠕虫盖上了盖子。。。杰夫·普洛塞斯是一位才华横溢的头脑和公认的作家。如果他找不到答案,除了写他自己的组件,那么我看不出有多少机会可以。。。不过,我会记住这一点,以备将来参考,永远不会忘记我们