2012-12-05 160 views
0

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

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

有没有解决方案呢?或者我必须选择不使用按钮,并运行不受信任的JavaScript?

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

回答

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的详细信息。

将代码封装在iframe中,可以为您提供一些防范帧内容的措施,因为它无法触及父级以获取数据或操作代码。

您可以通过(巧妙地命名的)​​属性对沙盒化iframe来提高保护等级。例如:

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

将页面加载到一个iframe,并允许它可以访问它的起源(但仍然不是父母的原点)运行的脚本。但是,它不能够浏览顶级文档,加载插件等。在Chrome,Safari,Firefox 18+和IE9中支持沙盒功能(我认为可能是10.)。

+0

谢谢! Facebook不公布IFRAME的实现非常好,因为他们没有为它提供一个生成器,所以我赞赏上面的代码片段。在做了更多的研究之后,只有IE10支持沙盒属性,尽管IE6-IE9支持安全=限制,这可能对我很有帮助。 – Max

0

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

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

安全性与可用性总是一场争斗。我会重新考虑将这些按钮放在包含敏感信息的网站上。只是祈求没有什么不好的事情发生:)另外,您可能会添加adiitional保护机制,例如请求在对用户数据或任何敏感数据进行任何更改之前重新进行身份验证。