SiteFactoryCMS1.1版新增功能快遞:URL地址傳遞參數的數據類型檢查
程序在什么環境下最安全?這是開發組從最初設計SiteFactory時就一直在討論和研究的問題。在SiteFactory 1.0版的開發中,我們用了很多措施來保證系統的相對安全,具體可以查看想博客文章和官網介紹。今天要給大家介紹的SiteFactory? CMS 1.1版中新安全措施中一種——地址參數檢查措施。
什么是地址參數
比如我們訪問www.oudike.com.cn/item/88.aspx,因為我們系統做了UrlRewrite,實際訪問的地址是www.oudike.com.cn/item.aspx?id=88 那么“Id=88”就叫做地址參數。
地址傳遞參數做類型檢查有什么好處
以上面的地址為例子,“88”通常用來作為查詢條件的,如果處理不好,很容易造成萬惡的SQL注入漏洞。當然單單就“ID=88”來說,堵住漏洞的方法有很多種,感覺最好的辦法就是限制用戶輸入。當我們知道這個頁面只接受一個ID參數,并且是數字類型的話,那么我們在讓用戶通過url傳遞Id時,這個參數就只能是數字,是其他類型就給出錯誤提示,拒絕其進一步的訪問。
下面是出錯演示:
比如,當我們訪問 www.oudike.com.cn/item.aspx?id=88時,則一切正常。當我們訪問www.oudike.com.cn/item.aspx?id=d’d 則會出現如下提示:
其他錯誤提示還有 參數太多,缺少參數,參數錯誤等提示。
這次在SiteFactory 1.1版中已經默認開啟了這個驗證。我們對于所有前臺的頁面(管理后臺由于站長可以改目錄使別人猜不到而沒有做判斷)也都在Config/QueryStrings.config中進行了配置。
如何修改QueryStrings.config?
用Editplus或者其他文本編輯器打開這個文件(Config/QueryStrings.config),首先看到第一行
Mode這里作用是設置參數檢查的方式。OnlyList的意思是只檢查QueryStrings.config中列出的文件。我們也可以設為All,這樣就是所有請求網站的aspx文件都會被檢查。如果這些文件沒有被配置在QueryStrings.config中,那么就說明這些文件是不允許帶任何參數的。
Page節的說明
在page節中有兩個參數,第一個參數 url就是要判斷的頁面,要注意這里的地址填寫,填寫不對就出錯了。第二個參數abortOnError 是否忽略錯誤。就是說當有人傳遞url地址時,地址附加的參數和page中配置的不一樣,如果把abortOnError設置為false,就是不進行錯誤提示,允許用戶繼續操作。如果page中沒有abortOnError或者把abortOnError設置為了true,那么就會出現錯誤提示,并終止操作。
什么時間下用abortOnError設為true,什么時間下設為false?
當我們已知這個頁面能夠接受多少參數,每個參數類型也都清楚,那么為了網站安全,建議盡量設置為true。不能預計參數或者懶惰不想配置每個頁面參數的話,就設置為false。比如SiteFactory1.1中,這個page節<page url="~/PayOnline/PayResult99bill.aspx" abortOnError="false">我們不能預知在線支付接口那里會返回多少個參數,我們就設置為false。,但是我們在page下設置的頁面參數,仍然會進行檢查。
注意page ,abortOnError是區分大小寫的,大家在修改或者添加配置時不要寫錯了。
page節下的param節
在param節中,name就是參數名,實際地址中是什么就要寫什么,name值不區分大小寫。datatype 代表的是這個參數的數據類型,datatype的值是區分大小寫的。Int表示只接受數字類型的。Datatype還有String,Bool等共三種類型。如果我們把id的datatype改成了String 類型,那么我們最初訪問www.oudike.com.cn/item.aspx?id=d’d就不會出錯了。
optional參數是代表這個參數是否是必須的。當我們在param中沒有加optional或者optional=”true”時,這就代表是這個參數是必須的。optional=”false”就代表是可選的。當我們把參數設置為optional=”true”時,如果我們在訪www.oudike.com.cn/item.aspx時沒有帶參數,就會提示“缺少參數錯誤”。如果設置為optional=”false”,那么就不會提示這個錯誤。
另外對于param,當數據類型是String時,我們還可以設定參數的長度。類似的情況如下:
這時的Pay只能接受3個字符長度的參數,當我們傳遞給Pay=aabc時,就會提示出錯。而傳遞給Pay=aab時,就沒有問題。
如果修改錯誤提示為其他文字
有些用戶可能對于 參數錯誤,參數太多,缺少參數等錯誤提示,感覺不夠個性化或者想要改成英文的。可以通過修改App_GlobalResources文件夾下的ErrorMessage.resx文件。App_GlobalResources是存放資源的文件夾。我們把很多錯誤提示都放到了ErrorMessage.resx中,下個版本我們可能會提供多語言支持。這個文件可以用Editplus或者DreamWeave進行打開,找到PageParamLessThen、PageParamMoreThen、PageParamNotContains、PageParamUnequal等幾個參數,修改value中的值就可以了。如果想要在value中嵌入html碼,需要首先進行轉義,比如把“<”變成“<”,把“>”變成“>”。
2 <value><li>缺少參數!</li></value>
3 </data>
當你的網站出現參數錯誤一類的提示時,就要檢查一下Config/QueryStrings.config中,看配置是否和實際的一樣了。
任何疑問或者建議,請發郵件到powereasydeveloper@qq.com
用戶登錄
還沒有賬號?
立即注冊