2008-09-15 39 views
1

我在網頁上使用了富文本編輯器。 .NET具有防止發佈HTML標籤的功能,所以我添加了一個JavaScript代碼片段來在帖子前改變尖括號和別名字符對。該別名在服務器上用必要的尖括號替換,然後存儲在數據庫中。拋開XSS,解決這個問題的常見方法是什麼? (即是否有更好的方法?)瀏覽器所見即所得最佳實踐

如果您對XSS(跨站點腳本)有任何意見,我相信這將有助於某人。

回答

3

實際上有一種方法可以關閉「功能」。這將允許用戶發佈他們想要的任何字符,並且不需要使用Javascript將字符轉換爲別名。請參閱disabling request validation這篇文章。這意味着你必須做你自己的驗證,但是從你的文章的聲音來看,這似乎是你想要做的。您也可以通過關注the instructions here來禁用每頁。

1

我的第一條評論是避免使用JavaScript來改變尖括號。繞過這與在瀏覽器中禁用JavaScript一樣簡單。幾乎所有的服務器端語言都有一些實用的方法,可以將一些HTML字符轉換爲實體對應的字符。例如,PHP使用htmlentities(),我相信.NET有一個等效的實用方法。一般來說,您可以使用正則表達式代替尖括號,圓括號和雙引號,這將爲您提供一個安全解決方案。

3

我認爲最安全的方法是不允許用戶使用您的WISYWIG創建標籤。也許使用類似本網站上的降價編輯器或available here.將是另一種方法。

還要保持Page指令ValidateRequest = true,它應該停止在請求中發送標記,您當然需要在出現時處理這個錯誤。人們將始終能夠使用諸如Tamper data之類的Firefox擴展插入請求,但ValidateRequest = true應該至少停止ASP.NET接受它們。

傑夫最近在這裏發表了一篇關於XSS攻擊的直接文章。它也說明你的cookies只有HttpOnly,這是一種防止cookie被盜的半防禦功能。祝你好運!

+1

是的,但Markdown的唯一問題是,它明確*允許* Markdown旁邊Markdown ..這使得它相當艱難 – 2008-09-15 04:42:29