从服务器接收的 Cookie 是安全的,但发送到服务器的 Cookie 不安全 ASP.NET

Posted

技术标签:

【中文标题】从服务器接收的 Cookie 是安全的,但发送到服务器的 Cookie 不安全 ASP.NET【英文标题】:Cookies received from Server is Secure But Cookies sent to Server is not secure ASP.NET 【发布时间】:2014-12-13 18:20:11 【问题描述】:

在我的 ASP.NET Web 应用程序中,我进行了以下更改,通过将以下条目添加到 web.config 来使 ASP.NET_SessionID 和 .ASPXAUTH Cookies 安全

<httpCookies httpOnlyCookies="true" requireSSL="true" />

并添加以下标签

<forms requireSSL ="true" /> 

但我的问题是,从服务器接收到的 Cookie(网络->Cookies->方向列的值为接收)已将 Secure 和 HttpOonly 标志设置为 true。当我使用 IE 11 开发工具进行调试时找到了信息,但是发送到服务器的 cookie 数据(网络-> Cookies-> 方向列的值为已发送)没有任何 Secure 或 HttpOnly 标志设置为 true。

这是默认行为吗?如果是这样,为什么发送到服务器的数据没有设置 Secure 和 HttpOnly 标志?除了上述对配置文件所做的更改之外,如何设置它。

【问题讨论】:

【参考方案1】:

Cookie 标志,如 Secure 和 HttpOnly,仅从服务器发送到客户端。你永远不会在交通中看到他们走另一条路。如果您想确保 cookie 是安全的,请让浏览器通过 HTTP(而不是 HTTPS)发出请求,并查看 cookie 是否仍然存在(它不应该存在)。如果您想确保 cookie 是 HttpOnly,请在浏览器中打开您的站点,然后使用开发工具中的 JS 控制台检查 document.cookie 的值;您应该会看到您拥有的所有非 httponly cookie,但没有 httponly cookie。

Cookie 本质上是客户端的东西。它们是服务器告诉客户端“每次您向我发出请求时,都包含这些信息”的一种方式。安全标志将其修改为“每次您通过安全连接向我提出请求时,请包含此信息(但永远不要通过不安全的连接泄露它)”。一个符合标准的用户代理——也就是说,一个网络浏览器——应该遵守这些指令。但是,没有其他等效指令;服务器根本不需要对客户端发送的 cookie 做任何事情,并且没有“客户端在服务器上设置 cookie”相当于服务器可以在客户端上设置 cookie 的方式。指令(包括 Secure、HttpOnly、Domain、Expires 等)仅在 设置 cookie 时使用。

【讨论】:

感谢@CBHacking 的回复。但我还有一个问题,我使用 Secure 关键字创建了一个 Jquery cookie,如下所示'$.cookie('Name', 'Value', path: '/' ,secure:true);'。因此,如果它尝试使用 http 协议访问 cookie,它将不存在。这样看来 cookie 是安全的? 是的,您还可以使用 javascript 创建 cookie,并且当它们由服务器设置时,您可以控制 cookie 的参数,包括 Secure 等选项。我之前描述的相同测试 - 检查到服务器的流量,HTTPS 应该有安全 cookie 但 HTTP 不应该 - 无论服务器设置 cookie 还是脚本都可以工作。 根据您的建议,我已经使用 Fiddler 检查了网站的流量,以获取使用 javascript 设置的 cookie,但没有设置安全 cookie。我也没有明白你的意思 italic - 无论服务器设置 cookie 还是脚本都可以。 斜体。对此感到抱歉。你能简要介绍一下那句话吗? 我指的测试是“访问https://yourdomain.com,观察所有cookie,包括安全cookie。然后访问http://yourdomain.com,观察只有非安全cookie被发送”。无论 cookie 是如何创建的,都会发生这种情况。 您似乎希望安全标志出现在浏览器发送的流量中。这将永远不会发生,因为该标志仅在创建 cookie 时使用,并且 cookie 仅由服务器在它发送给客户端的响应中创建,或者由客户端上运行的脚本创建。来自客户端的请求永远不会创建 cookie,因此它永远不会包含 cookie 标志。另一种说法:安全标志仅用于Set-cookie 标头(仅在服务器响应中,从不在浏览器请求中),而不是Cookie 标头(在请求中,而不是响应中)。跨度>

以上是关于从服务器接收的 Cookie 是安全的,但发送到服务器的 Cookie 不安全 ASP.NET的主要内容,如果未能解决你的问题,请参考以下文章

Android端接收和发送cookie

会话技术Cookie&Session

AJAX 请求不发送 cookie (NET 5)

golang实现正/反向代理服务

Cookie不会在跨源请求中发送

#WEB安全基础 : HTTP协议 | 0x8 HTTP的Cookie技术