但今天卻碰到,只是輸入EnableEventValidation="false"無效,Google了一下發現,只是輸入這樣原本就是無效的,不曉得為什麼在MoneySave中這樣可以通過
正確的應該是要在頁面上輸入ValidateRequest='false' EnableEventValidation="false"
如下
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Index.aspx.cs" Inherits="Index" ValidateRequest='false' EnableEventValidation="false"%>
並且在WebConfig加上以下這段才行
<system.web> <httpRuntime requestValidationMode="2.0" /> </system.web>
不過隨著這個打開,也就打開了網頁的被攻擊的大門
如果是搜尋的話,我們使用paramater的方式可以解決
如果是輸入的話,限制輸入的長度也可以避免一些簡單攻擊(還是可以透過proxy的方式來攻擊)
但如果是輸入的Note欄位,不限字數時,那們如果有人是輸入了
<p>test <img src=""INVALID-IMAGE" onerror='location.href="http://www.yahoo.com.tw/"'>!</p>
(上面那段換行的原因,是因為程式碼的大於符號,在網址後面不曉得什麼原因會轉不回來)
則你會發現顯示那篇文章的頁面在進入後,就會直接轉向www.yahoo.com.tw
因此要更安全的作法就是要將輸入欄位加上
Server.HtmlEncode(edtNote.Text)
這樣使用者輸入html會被轉成文字型態呈現於頁面上
如果像可以輸入網址欄位的話加上上述措施,看起來似乎沒有問題,但實際上還不清楚是否會有漏洞產生
順道一題,如果是網址欄位,如果使用者沒有輸入http://的話,會無法正確連到想要的網址
必須多一道工去補上
string WebSite = "www.yahoo.com.tw"; if (WebSite != "") { if (WebSite.IndexOf("http://") == -1) { WebSite = "http://" + WebSite; } } Label1.Text = WebSite;
關鍵字
限定 html EnableEventValidation="false"
requestValidationMode
偵測 textbox html
參考文章
http://www.coffnet.com/a/xy/20120514/957.html
http://www.cftea.com/c/2011/05/O7TRAOUPLFO8BQKB.asp
http://www.dotblogs.com.tw/jimmyyu/archive/2010/02/28/aspnet-40-extensible-request-validation.aspx
http://hi.baidu.com/sucheng1031/item/b3dc060c74a4107cbee97e58
http://demo.tc/Post/732
http://www.chen-qi.com/?p=331
補充說明
如果有時候使用者輸入了Html我們卻想得到不含Html的乾淨字串,可以用正則表達式做處理
可以參考以下文章
http://demo.tc/Post/281
http://demo.tc/Post/634
沒有留言:
張貼留言