對於我的用戶的個人資料,我將讓他們插入HTML代碼,這些代碼將顯示在他們的個人資料中。如果我允許用戶爲他們的「個人資料」編寫HTML,我應該禁止/移除哪些元素以保護其他用戶的安全?
當他們保存個人資料時,是否需要手動刪除任何特殊標籤?
除了<script>
標籤,還有什麼可能是危險的?
還有什麼可能是「危險的」?
對於我的用戶的個人資料,我將讓他們插入HTML代碼,這些代碼將顯示在他們的個人資料中。如果我允許用戶爲他們的「個人資料」編寫HTML,我應該禁止/移除哪些元素以保護其他用戶的安全?
當他們保存個人資料時,是否需要手動刪除任何特殊標籤?
除了<script>
標籤,還有什麼可能是危險的?
還有什麼可能是「危險的」?
小程序,嵌入,對象,腳本和iframe應該是不惜一切代價避免。
a和img可能會有問題,因爲它們允許鏈接到非現場資源。它們也可以包含javascript:網址
避免讓用戶輸入任何頭標籤到body中。風格,鏈接,元,標題等
你還必須小心的屬性。不要允許任何以on開頭的屬性,因爲它們是javascript事件綁定。您還需要檢查javascript:和data:url的任何URL屬性。
編輯補充:
形式和他們的孩子也可能是一些避免,因爲它們可以被用來欺騙用戶進入該被通過其他網站收集的信息。
對於標籤和屬性,我建議使用白名單策略而不是黑名單,因爲使用黑名單錯過某些內容要容易得多。另外,隨着HTML5的發展,有大量新標籤和屬性值得注意。
假設你沒有使用PHP或其他服務器端處理,唯一的其他元素我擔心的是iframe, object, and applet
如果您使用的是服務器端語言,只要確保消毒也任何用戶輸入。
您還可能要對XSS攻擊讀了,只是要提防任何惡意的廢話:http://ha.ckers.org/xss.html
幾乎一切。你不知道的人不這樣做的:
<img onload="hax" />
此外,您必須驗證它的服務器端,而不是客戶端
http://html5sec.org/是什麼可以用來執行Javascript的好列表。
最好的方法是使用白名單:除了絕對安全的東西,像幾個基本的樣式元素一樣,刪除所有東西;如果可能的話,不要允許任何屬性。
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是一個非常受歡迎的平臺,因此它具有相關性。
基本上刪除所有標籤和屬性的除了要允許像無害的,p
,strong
,b
,em
,ul
,ol
,li
,div
,span
,h2
,h3
,u
,i
如果您允許img
標記,請務必不要刪除alt
,src
和title
屬性。
如果您允許a
標記,請確保不要刪除href
屬性。
考慮到這一點,可能的標籤和屬性列表將幾乎是無限在您的檢查代碼中。
如果您採取不允許任何標籤的觀點,然後想想什麼可以允許/人們可能需要什麼?哇..沒有正確閱讀這個問題.. _手動刪除_? ..哇.. – Joonas 2011-12-14 12:32:44
@Lollero好的,手動刪除LOL – 2011-12-14 12:37:30