ASP Classic站点设置HttpOnly后出现重复Cookie的安全性疑问
当前代码的安全风险
当前代码无法有效防范XSS攻击,原因在于浏览器中仍存在一个未开启HttpOnly属性、路径为/的ASPSESSIONID Cookie。XSS攻击者可通过JavaScript读取该Cookie的值,进而窃取用户会话,达成冒充用户的攻击目的。
双Cookie产生的原因
- ASP Classic默认会自动生成一个路径为
/的ASPSESSIONID Cookie,且原生不包含HttpOnly属性 - 你的代码通过
Response.AddHeader设置新Cookie时,未指定Path属性,浏览器会默认使用当前请求的路径(即/mysite)。由于两个Cookie路径不同,浏览器会同时保留它们,而非覆盖
最优解决方案
方案1:修改IIS配置(推荐,彻底解决)
针对不同IIS版本,配置方式如下:
- IIS 7及以上:在站点根目录的
web.config中添加以下配置,强制所有会话Cookie启用HttpOnly:
<system.webServer> <httpCookies httpOnlyCookies="true" requireSSL="false" /> </system.webServer>
- IIS 6:可通过修改IIS元数据库实现,或使用脚本批量设置。操作路径:右键站点→属性→主目录→配置→选项,启用会话状态后,通过自定义HTTP头工具添加HttpOnly属性(IIS6原生支持有限,需借助辅助手段)
方案2:改进现有代码,覆盖原始Cookie
修改代码,在设置Cookie时明确指定Path=/,以此覆盖ASP自动生成的路径为/的Cookie:
AspSessionCookie = Request.ServerVariables("HTTP_COOKIE") ' 拆分Cookie字符串 cookies = Split(AspSessionCookie, ";") ' 遍历查找ASPSESSIONID并重新设置 For i = 0 To UBound(cookies) If InStr(cookies(i), "ASPSESSIONID") > 0 Then cookieParts = Split(cookies(i), "=") cookieName = Trim(cookieParts(0)) cookieValue = Trim(cookieParts(1)) ' 指定Path=/覆盖原始Cookie,同时添加HttpOnly属性 Response.AddHeader "Set-Cookie", cookieName & "=" & cookieValue & "; Path=/; HttpOnly" Exit For End If Next
此修改后,浏览器会用新的带HttpOnly属性的Cookie替换原始Cookie,避免双实例问题。
内容的提问来源于stack exchange,提问作者anthony morales
相关产品推荐
相关产品推荐

