CKEditor
應該是許多人最喜歡用的內容編輯器,但一不小心他就有可能成為你的網站的資安漏洞,以下見紹CKEditor的正確使用方式之一首先,當你建立好一個ASP.NET MVC的網站專案,你必須載入CKEditor的JS檔,許多網站都有說明,這邊就直接貼上一頁簡單的Razor Code
@Html.TextAreaFor(model => model.Info, new { id = "editor1", rows = "10", cols = "80" })
接著我們再寫JS
$(document).ready(function () {
CKEDITOR.replace('editor1');
})
基本上這樣就完成了CKEditor畫面上的呈現,如下,但真正的問題是送去後端時,你會發現送出時出現下錯誤
Server Error in '/' Application.
A potentially dangerous Request.Form value was detected from the client (Content="<p>test</p>
").
此原因是因為ASP.NET的預設專案有幫忙阻擋來自前端含有html的值,預防惡意的資料注入,
通常使用CKEditor的人遇到這問題去Google就會得到一堆解法,其中最常看到的就是再Web.config設定
<httpRuntime requestValidationMode="2.0" />
如此一來問題解決了,但整個網頁的門戶就大開了,所有的欄位都可以被注入,這方法當然是不好,但還是一堆人用,而且Google到的資料也一堆解決方法是教你使用這方法......
另外一種比較好一點的解法,會教你設定Web.config只在特定頁面開放,例如:
如此一來問題解決了,但整個網頁的門戶就大開了,所有的欄位都可以被注入,這方法當然是不好,但還是一堆人用,而且Google到的資料也一堆解決方法是教你使用這方法......
另外一種比較好一點的解法,會教你設定Web.config只在特定頁面開放,例如:
- <location path="Admin/Taiwan8ViewAuthors/Create">
- <system.web>
- <httpRuntime requestValidationMode="2.0" />
- </system.web>
- </location>
此方法解決了門戶大開的問題,但問題是在指定的頁面上所有的欄位都仍然可以被輸入HTML語法,而我們真正要的可能只有一兩個欄位允許而已,所以我建議的解決方法是
再ViewModel裡面先定義好允許HTML的欄位,把欄位加上[AllowHtml]的標籤
如此便不需要再Web.config埋下一個大坑,讓人有機會再不該輸入HTML的欄位輸入HTML了~(灑花)
留言
張貼留言