2012-12-05 74 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保護機制,例如請求在對用戶數據或任何敏感數據進行任何更改之前重新進行身份驗證。