我正在使用ASP.NET Web窗體進行博客樣式註釋。如何在防止XSS的同時允許使用<img>?
編輯1:這看起來更復雜,然後我首先想到。你如何過濾src?
我寧願仍然使用真正的html標籤,但如果事情變得太複雜,我可能會去一個自定義路線。我還沒有做過任何XML,那麼我需要了解更多信息嗎?
我正在使用ASP.NET Web窗體進行博客樣式註釋。如何在防止XSS的同時允許使用<img>?
編輯1:這看起來更復雜,然後我首先想到。你如何過濾src?
我寧願仍然使用真正的html標籤,但如果事情變得太複雜,我可能會去一個自定義路線。我還沒有做過任何XML,那麼我需要了解更多信息嗎?
使用XML解析器驗證您的輸入,並刪除或編碼您不想允許的所有元素和屬性。在這種情況下,刪除或編碼除<img>
以外的所有標籤。tag, and all attributes from that except
和標題src
,alt
如果IMG是你允許的唯一的東西,我建議你使用簡單的方括號語法來允許它。這將消除解析器的需要,並減少解析器對其他危險邊緣情況的負載。我說,是這樣的:
Look at this! [http://a.b.c/m.jpg]
這將轉換爲:
Look at this! <img src="http://a.b.c/m.jpg" />
所以沒有惡意的東西得到的SRC部分傳遞,那麼也應該過濾的SRC地址。也許就像
Look at this! [javascript:alert('pwned!')]
限制圖片擴展功能並沒有太多幫助,因爲您可以在服務器上設置轉發並擁有瀏覽器加載任何你想要的URL。但是,我同意,使用一些替代語法似乎是一個更好的主意,而不是像HTML清理這樣的東西。 – 2008-09-21 05:17:32
如果你結束了一個非HTML格式去(這使事情變得更容易B/C你可以從字面上逃避所有HTML),使用標準的語法像markdown。 markdown image syntax是![alt text](/path/to/image.jpg)
還有其他人,如Textile。它的圖像語法是!imageurl!
@chakrit建議使用自定義語法,例如括號內的網址 - 這可能是最好的解決方案。您DEFINITELY不用想入手解析等搞亂
只要確保你正確編碼整個註釋(根據上下文 - 看到我對這個答案在這裏Will HTML Encoding prevent all kinds of XSS attacks?)
(順便說一句我剛剛發現自定義的一個很好的例子syntax right right there; ;-))
還提到,將文件擴展名限制爲jpg/gif/etc - 即使這可以被繞過,並且還會限制協議(例如http://)。
另外一個需要考慮的問題是CSRF(http://www.owasp.org/index.php/Cross-Site_Request_Forgery)。如果您不熟悉此安全問題,它基本上允許攻擊者強制我的瀏覽器向您的應用程序提交有效的身份驗證請求,例如轉賬或更改我的密碼。如果這是託管在您的網站上,他可以匿名攻擊任何易受攻擊的應用程序 - ,包括您的。 (請注意,即使其他應用程序易受攻擊,它不是你的錯,但它們會受到攻擊,但你仍然不想成爲攻擊主機或攻擊來源......)。就你自己的網站而言,例如,攻擊者更容易更改站點上的用戶密碼。
也不允許以http://開頭的網址(尤其是javascript :) – rpetrich 2008-09-21 04:09:33