沙盒社交共享JavaScript

时间:2012-12-05 03:36:47

标签: javascript security social-networking sandbox

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

  • Google Caja可能有效,但它需要专门编写第三方代码以容纳Caja。
  • 内容安全策略可能有效,但它是sparsely implemented,尤其是IE(甚至10),并且没有好的方法来检测它是否存在。

有解决方案吗?或者我必须在没有按钮和运行不受信任的JavaScript之间做出选择?

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

2 个答案:

答案 0 :(得分:0)

  

我不希望将安全的cookie泄漏到Facebook或Twitter上。

如果你害怕当浏览器进入并获取twitter / facebok JS它将传递你的网站cookie,然后它不会。但如果你包含了一些js,它可以通过document.cookies访问cookie。此外,我不认为重写真的是一种选择,太多的工作,如果它改变了怎么办?

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

答案 1 :(得分:0)

如果你不信任第三方JavaScript(我不怪你,这太可怕了!),你最好的办法是使用这些社交网络提供的iframe实现。例如,您可以通过向您的网站添加以下框架来添加Facebook“赞”按钮:

<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的类似设置。

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

您可以通过(明确命名的)iframe属性沙箱化sandbox来提高保护级别。例如:

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

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