2011-12-14 13 views
1

對於我的用戶的個人資料,我將讓他們插入HTML代碼,這些代碼將顯示在他們的個人資料中。如果我允許用​​戶爲他們的「個人資料」編寫HTML,我應該禁止/移除哪些元素以保護其他用戶的安全?

當他們保存個人資料時,是否需要手動刪除任何特殊標籤?

除了<script>標籤,還有什麼可能是危險的?

還有什麼可能是「危險的」?

+5

如果您採取不允許任何標籤的觀點,然後想想什麼可以允許/人們可能需要什麼?哇..沒有正確閱讀這個問題.. _手動刪除_? ..哇.. – Joonas 2011-12-14 12:32:44

+1

@Lollero好的,手動刪除LOL – 2011-12-14 12:37:30

+1

,。 ;) – graphicdivine 2011-12-14 12:38:16

回答

3

小程序,嵌入,對象,腳本和iframe應該是不惜一切代價避免。

a和img可能會有問題,因爲它們允許鏈接到非現場資源。它們也可以包含javascript:網址

避免讓用戶輸入任何頭標籤到body中。風格,鏈接,元,標題等

你還必須小心的屬性。不要允許任何以on開頭的屬性,因爲它們是javascript事件綁定。您還需要檢查javascript:和data:url的任何URL屬性。

編輯補充

形式和他們的孩子也可能是一些避免,因爲它們可以被用來欺騙用戶進入該被通過其他網站收集的信息。

對於標籤和屬性,我建議使用白名單策略而不是黑名單,因爲使用黑名單錯過某些內容要容易得多。另外,隨着HTML5的發展,有大量新標籤和屬性值得注意。

1

假設你沒有使用PHP或其他服務器端處理,唯一的其他元素我擔心的是iframe, object, and applet

如果您使用的是服務器端語言,只要確保消毒也任何用戶輸入。

您還可能要對XSS攻擊讀了,只是要提防任何惡意的廢話:http://ha.ckers.org/xss.html

2

幾乎一切。你不知道的人不這樣做的:

<img onload="hax" /> 

此外,您必須驗證它的服務器端,而不是客戶端

1

http://html5sec.org/是什麼可以用來執行Javascript的好列表。

最好的方法是使用白名單:除了絕對安全的東西,像幾個基本的樣式元素一樣,刪除所有東西;如果可能的話,不要允許任何屬性。

2

img似乎是另一個明顯的。但我同意Lollero,不要以爲什麼要禁止,但在允許。請記住,這不僅僅是標籤,還有屬性。你想建立一個標籤白名單和你想允許的屬性。

FWIW,下面是WordPress的默認(呃,至少還算外的日期安裝的是我有得心應手)使用徵求意見的白名單:

  • a
    • href - 是肯定只允許你想允許的協議,例如,可能不是僞協議的javascript:
    • title
  • abbr
    • title
  • acronym
    • title
  • b
    • cite
  • cite
  • code
  • del
    • datetime
  • em
  • i
  • q
    • cite
  • strike
  • strong

(您可以在此wp-includes/kses.php列表中$allowedTags變量)。我科幻由於Wordpress是一個非常受歡迎的平臺,因此它具有相關性。

2

基本上刪除所有標籤和屬性的除了要允許像無害的,pstrongbemulollidivspanh2h3ui

如果您允許img標記,請務必不要刪除altsrctitle屬性。

如果您允許a標記,請確保不要刪除href屬性。

考慮到這一點,可能的標籤和屬性列表將幾乎是無限在您的檢查代碼中。

相關問題