<%@ Page Language="C#" ValidateRequest="false" %>
當 ValidateRequest 屬性為 true 時,ASP.Net 會去偵測頁面上是否有所謂的惡意字元,如果有發現的話,就會丟出 HttpRequestValidationException。但當你有 Rich Editor 的需求時,就不得不關閉 ASP.Net 預設所提供的安全防護。
假如當你關掉 ValidateRequest 後,使用者在你的 Rich Editor 編輯器輸入以下內容:
<style>@import"javascript:location.href='http://yahoo.com.tw'";</style>
之後存到資料庫,日後只要使用者瀏覽這段內容時,他的網頁就會被導到 http://yahoo.com.tw,造成我們耳熟能詳的釣魚網站攻擊。當然,比較新的瀏覽器已經針對這些有問題的寫法進行防堵,Fire Fox、Chrome、IE8 目前並不會執行上面那段程式碼,但 IE6 卻會。也就是說,當使用者的瀏覽器是 IE6 時,只要他瀏覽到被注入惡意程式碼網站時,就會發生網頁轉址的現象。
為了避免網站被值入惡意程式,可以參考[參考01][參考02]的作法,先對使用者網頁所輸入的內容利用 HttpUtility.UrlEncode() 進行編碼,然後在針對你所允許的 HTML 與法進行開放的動作。尤其是[參考02],連參考資訊都整理的非常豐富,值得好好拜讀。
參考:
01:How To: Prevent Cross-Site Scripting in ASP.NET
02:警告:为了安全请不要随意将ASP.Net的validateRequest="false"
沒有留言:
張貼留言