0

我想在我的网站上使用社交分享小部件(例如 Facebook Like、Twitter Tweet 等),但我不想直接嵌入第三方脚本标签。我希望我的网站只运行受信任或沙盒代码。

  • Google Caja可能会工作,但它需要专门编写第三方代码以适应 Caja。
  • 内容安全策略可能会起作用,但它的实现很少,尤其是 IE(甚至 10 个),并且没有很好的方法来检测它是否存在。

有针对这个的解决方法吗?还是我必须在根本没有按钮和运行不受信任的 JavaScript 之间做出选择?

附加上下文:我想在 HTTPS 上运行我的整个网站,但我也想有共享按钮。我不想将安全 cookie 泄露到 Facebook 或 Twitter。

4

2 回答 2

0

我不想将安全 cookie 泄露到 Facebook 或 Twitter。

如果您担心浏览器会去获取 twitter/facebook JS 时它会传递您的网站 cookie,那么它不会。但是如果你包含一些 js 它可以通过 document.cookies 访问 cookie。而且我不认为重写真的是一种选择,工作量太大,如果改变了怎么办?

安全性与可用性始终是一场战斗。我建议不要在包含敏感信息的网站上包含这些按钮。并且祈祷不要发生任何不好的事情 :) 另外,您可以添加其他保护机制,例如在对用户数据或任何敏感数据进行任何更改之前请求重新验证。

于 2012-12-05T07:32:14.557 回答
0

如果您不信任第三方 JavaScript(我不怪您,这很可怕!),您最好的选择是使用iframe这些社交网络提供的实现。例如,您可以通过将以下框架添加到您的网站来包含 Facebook“Like”按钮:

<iframe src="//www.facebook.com/plugins/like.php?href=[PAGE_URL_GOES_HERE]&amp;send=false&amp;layout=button_count&amp;width=450&amp;show_faces=true&amp;font&amp;colorscheme=light&amp;action=like&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:21px;" allowTransparency="true"></iframe>

https://dev.twitter.com/docs/tweet-button#using-an-iframe详细介绍了 Twitter 的类似设置。

将代码封装在 an 中iframe可为您提供一些针对框架内容的保护措施,因为它无法到达父级以获取数据或操作您的代码。

iframe您可以通过(巧妙命名的)sandbox属性对沙盒进行沙箱化来提高保护级别。例如:

<iframe sandbox="allow-script allow-same-origin" src="..."></iframe>

会将页面加载到 中iframe,并允许它运行可以访问其来源的脚本(但仍然不是父来源的来源)。但是,它不能导航顶级文档、加载插件等。Chrome、Safari、Firefox 18+ 和 IE9(我认为。可能是 10)支持沙盒。

于 2012-12-05T11:11:42.537 回答