我希望在我的旧版 ASP 经典站点中实现 httpOnly。有谁知道该怎么做?
6 回答
如果您在 IIS 7/7.5 上运行经典 ASP 网页,则可以使用 IIS URL 重写模块编写规则以使您的 cookie 仅 HTTP。
将以下内容粘贴到 web.config 的部分:
<rewrite>
<outboundRules>
<rule name="Add HttpOnly" preCondition="No HttpOnly">
<match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" />
<action type="Rewrite" value="{R:0}; HttpOnly" />
<conditions>
</conditions>
</rule>
<preConditions>
<preCondition name="No HttpOnly">
<add input="{RESPONSE_Set_Cookie}" pattern="." />
<add input="{RESPONSE_Set_Cookie}" pattern="; HttpOnly" negate="true" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
详情见这里:http ://forums.iis.net/t/1168473.aspx/1/10
作为背景,出于 PCI 合规性的原因,需要 HTTPOnly cookie。PCI 标准人员(为了信用卡安全)让您的 sessionID cookie 至少有 HTTPOnly,以帮助防止 XSS 攻击。
此外,目前(2013 年 2 月 11 日),所有主流浏览器都支持对 cookie 的 HTTPOnly 限制。这包括当前版本的 IE、Firefox、Chrome 和 Safari。
有关各种浏览器版本如何工作和支持的更多信息,请参见此处: https ://www.owasp.org/index.php/HTTPOnly
Response.AddHeader "Set-Cookie", "mycookie=yo; HttpOnly"
其他选项如expires
,path
和secure
也可以通过这种方式添加。我不知道有什么神奇的方法可以改变你的整个饼干收藏,但我可能错了。
您需要将“;HttpOnly”附加到响应 cookie 集合中。
Response.AddHeader "Set-Cookie", ""&CStr(Request.ServerVariables("HTTP_COOKIE"))&";path=/;HttpOnly"&""
如果您使用 IIS7 或 IIS7.5 并安装 URL 重写加载项,则可以执行此操作。您可以创建一个重写规则,将“HttpOnly”添加到任何输出的“Set-Cookie”标头中。将以下内容粘贴到 web.config 的 <system.webServer> 部分。然后我使用 Fiddler 来证明输出。
问候,杰里米
<rewrite>
<outboundRules>
<rule name="Add HttpOnly" preCondition="No HttpOnly">
<match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" />
<action type="Rewrite" value="{R:0}; HttpOnly" />
<conditions>
</conditions>
</rule>
<preConditions>
<preCondition name="No HttpOnly">
<add input="{RESPONSE_Set_Cookie}" pattern="." />
<add input="{RESPONSE_Set_Cookie}" pattern="; HttpOnly" negate="true" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
HttpOnly 对提高 Web 应用程序的安全性几乎没有什么作用。一方面,它只适用于 IE(Firefox“支持”它,但在某些情况下仍会向 Javascript 公开 cookie)。另一方面,它只能防止对您的应用程序的“偷渡式”攻击;它无法阻止跨站点脚本攻击重置密码、更改电子邮件地址或下订单。
你应该使用它吗?当然。它不会伤害你。但是在你开始搞乱 HttpOnly 之前,你应该确定你正在做的 10 件事。