我正在尝试配置我的环境,以便身份验证 cookie 只能通过 HTTP 访问(保护它免受 XSS 攻击)。我阅读了几篇文章,得出的结论是我应该将 requireSSL 属性设置为“true”
<authentication mode="Forms">
<forms name="someName" loginUrl="~/login" timeout="40" protection="All" slidingExpiration="true" defaultUrl="~/index" requireSSL="true" />
</authentication>
问题是当我尝试设置身份验证 cookie 时,它会抛出异常。
FormsAuthentication.SetAuthCookie(username, false);
异常:
应用程序配置为发出安全 cookie。这些 cookie 要求浏览器通过 SSL(https 协议(protocol))发出请求。但是,当前请求未通过 SSL。
堆栈跟踪:
System.Web.HttpException:应用程序配置为发出安全 cookie。这些 cookie 要求浏览器通过 SSL(https 协议(protocol))发出请求。但是,当前请求未通过 SSL。
在 System.Web.Security.FormsAuthentication.SetAuthCookie(字符串用户名, bool createPersistentCookie,字符串 strCookiePath)
问题出现在我的本地机器上(即使它配置为 HTTPs 访问)和实时服务器(也是在 HTTPs 上)
谁能帮我解决这个问题?谢谢。
最佳答案
这有点离题,但仍然与您要完成的目标相关。您假设在 cookie 上使用 Secure
标志将保护它免受 XSS 攻击是不正确的。安全标志仅表示 cookie 将仅通过 HTTPS 发送。
您实际上要寻找的标志是 HttpOnly
标志。 HttpOnly
标志将导致浏览器仅将 cookie 作为 HTTP/S 请求的一部分提供。然后浏览器将拒绝客户端代码(JavaScript、Flash 等)访问 cookie,从而保护它免受 XSS 攻击。
综上所述,您应该使用这两个标志来保护敏感 cookie(如 session cookie)。
关于c# - 表单例份验证 - 需要 SSL - 设置身份验证 Cookie 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19949988/