【问题标题】:Does https secure cookies prevent XSS attacks?https 安全 cookie 是否可以防止 XSS 攻击?
【发布时间】:2011-09-25 16:45:37
【问题描述】:

https 连接是否保护 cookie 并防止 XSS 攻击。我有一个简单的博客,允许用户输入 JavaScript 代码作为输入。我希望允许用户输入 Javascript,同时仍然防止 XSS 攻击和 cookie 窃取。 https 是否有助于保护 cookie。我只发现很少有网站讨论这个问题,但还是有点不清楚。

【问题讨论】:

  • HTTPS 本身并不能阻止 XSS。
  • 允许用户输入 Javascript 是非常危险的。阻止恶意用户对您的其他用户做一些非常讨厌的事情是非常困难的。
  • @Cameron - 是否危险无关紧要。鉴于浏览器支持 javascript 伪协议,并且 Greasemonkey 和 Firebug 等附加组件允许用户在页面中运行脚本,因此不可能阻止用户在浏览器中的页面中运行他们想要的任何脚本,或者任何其他用户代理。
  • @Keoki - 我认为问题是如何编写安全代码。作为开发人员,我会在 stackoverflow 中搜索。
  • @RobG:关键是,如果我允许用​​户 A 输入任意 javascript,而我的服务器将其提供给用户 B,那么这对于恶意用户 A 来说是一个很好的攻击途径。关键不在于任何一个用户都在运行 Javascript;用户有可能给彼此造成问题,这才是问题所在。

标签: php javascript security https xss


【解决方案1】:

HTTPS 可以防止中间人攻击,而不是 XSS。不幸的是,会话 cookie 仅凭这一点并不安全,可以使用 HTTP 请求页面,然后相同的 cookie 将不受保护地发送。

为确保会话 cookie 仅在 HTTPS 连接上发送,您可以在启动会话之前使用函数 session_set_cookie_params():

session_set_cookie_params(0, '/', '', true, true);
session_start();

注意第一个true,表示cookie只会发送到HTTPS页面。第二个true 告诉浏览器,JavaScript 不能访问会话 cookie,这取决于浏览器是否正确完成。

另一个使您的网站更安全的好方法是,仅使用会话 cookie 来维护会话,并使用第二个 cookie 来处理身份验证。如果你有兴趣,我可以提供一个例子。

【讨论】:

  • 是的,举个例子。根据您的回答,如果会话 cookie 被强制通过 https 连接,那么我们可以说它不会受到 xss 攻击。
  • @Hussein - 会话 cookie 不是 XSS 攻击的一部分,关于 XSS 的一个很好的解释可以在这里找到:shiflett.org/articles/cross-site-scripting。我编写的示例描述了如何使用混合的 HTTP 和 HTTPS 页面,但它也显示了如何保持会话和身份验证分开 martinstoeckli.ch/php/php.html#ssl_nomim_cookie 。会话 cookie 将始终是攻击的目标。
【解决方案2】:

HTTP 协议(​​HTTPS 或 HTTP)对 XSS 没有帮助或确实有任何关系。您需要添加预防措施并小心将 javascript 输出到客户端的位置。

【讨论】:

  • @comm @cwa @jake 谢谢。假设我们希望用户在博客中输入 Google 广告代码。谷歌代码是 javascript。我们不能去掉 javascript,因为它是必需的。如果我们允许使用 javascript,那么我们对 xss 攻击的许多领域都是开放的。这个有什么解决办法。我确信有办法解决这个问题。
【解决方案3】:

一旦您允许某人在您的网站上动态存储和执行任意 JavaScript,他们就可以访问很多您希望他们不要管的东西。至少,他们可以劫持您的 PHP 会话 ID(毕竟他们可以访问您的 cookie),然后使用 Ajax 将其转发到某个远程服务器。一旦他们有了这些,他们就可以对你的用户做各种各样的废话。

如果您有让他们添加自己的 JavaScript,我建议您专门禁用所有 Ajax 功能(XMLHTTPRequest = function(){} 在大多数浏览器上很容易阻止所有 Ajax,但您可能需要查看进入 IE 需要什么(我不知道ActiveXObject = function(){} 会做什么......)。不幸的是,如果您希望使用 cookie(即如果您有会话),则无法阻止对它们的访问,因此您需要找到其他解决方法。

【讨论】:

    【解决方案4】:

    如果您希望用户能够输入 JavaScript 代码,但不对其进行解析,请通过 htmlspecialchars 运行它。 如果您希望他们能够执行代码,那么不,HTTPS 将无济于事,您将需要解析代码并从中删除任何不良内容。

    【讨论】:

      【解决方案5】:

      您可以使用 Web 应用程序防火墙来扫描和阻止 XSS,包括在 cookie 中,尽管后者可能会导致误报https://medium.com/p/5d4b1d33219a/edit

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-11
        • 1970-01-01
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多