如何保护经典ASP ASPSESSIONID cookie?

时间:2009-06-04 21:59:57

标签: session cookies asp-classic

有没有办法将经典ASP ASPSESSIONID * Cookie标记为安全?在我的页面完成渲染后,ASP ISAPI处理程序似乎添加了会话ID cookie,因此将代码放在我的页面末尾以循环遍历Response.Cookie集合并将它们标记为安全似乎不会触及ASPSESSIONID * cookie 。还有其他方法吗?

4 个答案:

答案 0 :(得分:9)

答案是没有 IIS管理器提供的标准UI上没有。但是,您可以通过AspKeepSessionIDSecure元数据库值

为SessionID启用安全Cookie

答案 1 :(得分:3)

我执行这个命令:

CSCRIPT C:\ Inetpub \ AdminScripts \ adsutil.vbs设置w3svc / 1 / AspKeepSessionIDSecure 1

更多信息请访问:http://blogs.msdn.com/b/rahulso/archive/2007/06/19/cookies-case-study-with-ssl-and-frames-classic-asp.aspx

答案 2 :(得分:1)

[编辑:您可以忽略以下内容。我刚刚意识到你在谈论ASPSESSIONID。}

内置支持安全cookie。

请参阅http://msdn.microsoft.com/en-us/library/ms524757.aspx

示例(对于ASP.Net,而不是经典ASP)

Response.Cookies("setSecure") = "someValue"
Response.Cookies("setSecure").Secure = true

答案 3 :(得分:0)

根据here的发现,UrlRewrite规则可以处理此问题。

如果HttpOnly Cookie上缺少SecureASPSESSIONID,则下面的规则会处理它们。 (对于其他cookie,通常它们是由站点ASP代码发出的:最好直接在负责它们的代码中进行处理。)

<system.webServer>
  <rewrite>
    <outboundRules>
      <rule name="Add HttpOnly" preCondition="No HttpOnly">
        <match serverVariable="RESPONSE_Set_Cookie" pattern="\s*ASPSESSIONID.*" />
        <action type="Rewrite" value="{R:0}; HttpOnly" />
      </rule>
      <rule name="Add Secure" preCondition="No Secure">
        <match serverVariable="RESPONSE_Set_Cookie" pattern="\s*ASPSESSIONID.*" />
        <action type="Rewrite" value="{R:0}; Secure" />
        <conditions>
          <add input="{HTTP_HOST}" pattern="localhost" negate="true" />
        </conditions>
      </rule>
      <preConditions>
        <preCondition name="No HttpOnly">
          <add input="{RESPONSE_Set_Cookie}" pattern="; HttpOnly" negate="true" />
        </preCondition>
        <preCondition name="No Secure" logicalGrouping="MatchAll">
          <add input="{RESPONSE_Set_Cookie}" pattern="; Secure" negate="true" />
        </preCondition>
      </preConditions>
    </outboundRules>
  </rewrite>
</system.webServer>

如果IIS服务器中未安装UrlRewrite,则会使站点崩溃。

请注意,如果通过Secure而非http合法访问了站点,则不应应用https规则,因此在本地浏览时不会发出该条件。如果从客户端通过Secure访问的站点发出了http,则客户端不会将cookie发送回服务器。

(我避免测试入站协议,因为无论如何,除非最终直接从其托管服务器或负载均衡器访问,否则不应在http上访问我正在工作的网站。)

我以前曾尝试使用asp/session/keepSessionIdSecure,但是它没有任何作用(至少对于负载均衡器后面的终止https并通过http访问站点服务器的站点)。此设置是AnthonyWJones answer指向的AspKeepSessionIDSecure元数据库值的现代版本(IIS 7 +)。