目錄
目錄X

SiteFactoryCMS1.1版新增功能快遞:URL地址傳遞參數(shù)的數(shù)據(jù)類型檢查

  程序在什么環(huán)境下最安全?這是開發(fā)組從最初設(shè)計SiteFactory時就一直在討論和研究的問題。在SiteFactory 1.0版的開發(fā)中,我們用了很多措施來保證系統(tǒng)的相對安全,具體可以查看想博客文章和官網(wǎng)介紹。今天要給大家介紹的SiteFactory? CMS 1.1版中新安全措施中一種——地址參數(shù)檢查措施。

什么是地址參數(shù)

  比如我們訪問www.avxsl666.com/item/88.aspx,因為我們系統(tǒng)做了UrlRewrite,實際訪問的地址是www.avxsl666.com/item.aspx?id=88 那么“Id=88”就叫做地址參數(shù)。

地址傳遞參數(shù)做類型檢查有什么好處

  以上面的地址為例子,“88”通常用來作為查詢條件的,如果處理不好,很容易造成萬惡的SQL注入漏洞。當然單單就“ID=88”來說,堵住漏洞的方法有很多種,感覺最好的辦法就是限制用戶輸入。當我們知道這個頁面只接受一個ID參數(shù),并且是數(shù)字類型的話,那么我們在讓用戶通過url傳遞Id時,這個參數(shù)就只能是數(shù)字,是其他類型就給出錯誤提示,拒絕其進一步的訪問。

下面是出錯演示:

  比如,當我們訪問 www.avxsl666.com/item.aspx?id=88時,則一切正常。當我們訪問www.avxsl666.com/item.aspx?id=d’d 則會出現(xiàn)如下提示:



 其他錯誤提示還有 參數(shù)太多,缺少參數(shù),參數(shù)錯誤等提示。

  這次在SiteFactory 1.1版中已經(jīng)默認開啟了這個驗證。我們對于所有前臺的頁面(管理后臺由于站長可以改目錄使別人猜不到而沒有做判斷)也都在Config/QueryStrings.config中進行了配置。

如何修改QueryStrings.config?

  用Editplus或者其他文本編輯器打開這個文件(Config/QueryStrings.config),首先看到第一行

<queryStrings mode="OnlyList">

  Mode這里作用是設(shè)置參數(shù)檢查的方式。OnlyList的意思是只檢查QueryStrings.config中列出的文件。我們也可以設(shè)為All,這樣就是所有請求網(wǎng)站的aspx文件都會被檢查。如果這些文件沒有被配置在QueryStrings.config中,那么就說明這些文件是不允許帶任何參數(shù)的。

Page節(jié)的說明

<page url="~/PayOnline/PayResult99bill.aspx" abortOnError="false">

  在page節(jié)中有兩個參數(shù),第一個參數(shù) url就是要判斷的頁面,要注意這里的地址填寫,填寫不對就出錯了。第二個參數(shù)abortOnError 是否忽略錯誤。就是說當有人傳遞url地址時,地址附加的參數(shù)和page中配置的不一樣,如果把abortOnError設(shè)置為false,就是不進行錯誤提示,允許用戶繼續(xù)操作。如果page中沒有abortOnError或者把abortOnError設(shè)置為了true,那么就會出現(xiàn)錯誤提示,并終止操作。

什么時間下用abortOnError設(shè)為true,什么時間下設(shè)為false?

  當我們已知這個頁面能夠接受多少參數(shù),每個參數(shù)類型也都清楚,那么為了網(wǎng)站安全,建議盡量設(shè)置為true。不能預計參數(shù)或者懶惰不想配置每個頁面參數(shù)的話,就設(shè)置為false。比如SiteFactory1.1中,這個page節(jié)<page url="~/PayOnline/PayResult99bill.aspx" abortOnError="false">我們不能預知在線支付接口那里會返回多少個參數(shù),我們就設(shè)置為false。,但是我們在page下設(shè)置的頁面參數(shù),仍然會進行檢查。
注意page ,abortOnError是區(qū)分大小寫的,大家在修改或者添加配置時不要寫錯了。

page節(jié)下的param節(jié)

<param name="Id" datatype="Int" optional="true" />

  在param節(jié)中,name就是參數(shù)名,實際地址中是什么就要寫什么,name值不區(qū)分大小寫。datatype 代表的是這個參數(shù)的數(shù)據(jù)類型,datatype的值是區(qū)分大小寫的。Int表示只接受數(shù)字類型的。Datatype還有String,Bool等共三種類型。如果我們把id的datatype改成了String 類型,那么我們最初訪問www.avxsl666.com/item.aspx?id=d’d就不會出錯了。

  optional參數(shù)是代表這個參數(shù)是否是必須的。當我們在param中沒有加optional或者optional=”true”時,這就代表是這個參數(shù)是必須的。optional=”false”就代表是可選的。當我們把參數(shù)設(shè)置為optional=”true”時,如果我們在訪www.avxsl666.com/item.aspx時沒有帶參數(shù),就會提示“缺少參數(shù)錯誤”。如果設(shè)置為optional=”false”,那么就不會提示這個錯誤。

  另外對于param,當數(shù)據(jù)類型是String時,我們還可以設(shè)定參數(shù)的長度。類似的情況如下:    

<param name="Pay" datatype="String" optional="true" length="3" />


  這時的Pay只能接受3個字符長度的參數(shù),當我們傳遞給Pay=aabc時,就會提示出錯。而傳遞給Pay=aab時,就沒有問題。

如果修改錯誤提示為其他文字

  有些用戶可能對于 參數(shù)錯誤,參數(shù)太多,缺少參數(shù)等錯誤提示,感覺不夠個性化或者想要改成英文的??梢酝ㄟ^修改App_GlobalResources文件夾下的ErrorMessage.resx文件。App_GlobalResources是存放資源的文件夾。我們把很多錯誤提示都放到了ErrorMessage.resx中,下個版本我們可能會提供多語言支持。這個文件可以用Editplus或者DreamWeave進行打開,找到PageParamLessThen、PageParamMoreThen、PageParamNotContains、PageParamUnequal等幾個參數(shù),修改value中的值就可以了。如果想要在value中嵌入html碼,需要首先進行轉(zhuǎn)義,比如把“<”變成“&lt;”,把“>”變成“&gt;”。

1 <data name="PageParamLessThen" xml:space="preserve">
2     <value><li>缺少參數(shù)!</li></value>
3  </data>

  當你的網(wǎng)站出現(xiàn)參數(shù)錯誤一類的提示時,就要檢查一下Config/QueryStrings.config中,看配置是否和實際的一樣了。

  任何疑問或者建議,請發(fā)郵件到powereasydeveloper@qq.com

 

【打印正文】 發(fā)布時間:2008-06-04 15:50:30 瀏覽次數(shù): 作者:bbsh 來源:本站原創(chuàng)
×

用戶登錄