目錄
目錄X

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

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

什么是地址參數(shù)

  比如我們?cè)L問(wèn)steponecloser.com/item/88.aspx,因?yàn)槲覀兿到y(tǒng)做了UrlRewrite,實(shí)際訪(fǎng)問(wèn)的地址是steponecloser.com/item.aspx?id=88 那么“Id=88”就叫做地址參數(shù)。

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

  以上面的地址為例子,“88”通常用來(lái)作為查詢(xún)條件的,如果處理不好,很容易造成萬(wàn)惡的SQL注入漏洞。當(dāng)然單單就“ID=88”來(lái)說(shuō),堵住漏洞的方法有很多種,感覺(jué)最好的辦法就是限制用戶(hù)輸入。當(dāng)我們知道這個(gè)頁(yè)面只接受一個(gè)ID參數(shù),并且是數(shù)字類(lèi)型的話(huà),那么我們?cè)谧層脩?hù)通過(guò)url傳遞Id時(shí),這個(gè)參數(shù)就只能是數(shù)字,是其他類(lèi)型就給出錯(cuò)誤提示,拒絕其進(jìn)一步的訪(fǎng)問(wèn)。

下面是出錯(cuò)演示:

  比如,當(dāng)我們?cè)L問(wèn) steponecloser.com/item.aspx?id=88時(shí),則一切正常。當(dāng)我們?cè)L問(wèn)steponecloser.com/item.aspx?id=d’d 則會(huì)出現(xiàn)如下提示:



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

  這次在SiteFactory 1.1版中已經(jīng)默認(rèn)開(kāi)啟了這個(gè)驗(yàn)證。我們對(duì)于所有前臺(tái)的頁(yè)面(管理后臺(tái)由于站長(zhǎng)可以改目錄使別人猜不到而沒(méi)有做判斷)也都在Config/QueryStrings.config中進(jìn)行了配置。

如何修改QueryStrings.config?

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

<queryStrings mode="OnlyList">

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

Page節(jié)的說(shuō)明

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

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

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

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

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

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

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

  optional參數(shù)是代表這個(gè)參數(shù)是否是必須的。當(dāng)我們?cè)趐aram中沒(méi)有加optional或者optional=”true”時(shí),這就代表是這個(gè)參數(shù)是必須的。optional=”false”就代表是可選的。當(dāng)我們把參數(shù)設(shè)置為optional=”true”時(shí),如果我們?cè)谠L(fǎng)steponecloser.com/item.aspx時(shí)沒(méi)有帶參數(shù),就會(huì)提示“缺少參數(shù)錯(cuò)誤”。如果設(shè)置為optional=”false”,那么就不會(huì)提示這個(gè)錯(cuò)誤。

  另外對(duì)于param,當(dāng)數(shù)據(jù)類(lèi)型是String時(shí),我們還可以設(shè)定參數(shù)的長(zhǎng)度。類(lèi)似的情況如下:    

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


  這時(shí)的Pay只能接受3個(gè)字符長(zhǎng)度的參數(shù),當(dāng)我們傳遞給Pay=aabc時(shí),就會(huì)提示出錯(cuò)。而傳遞給Pay=aab時(shí),就沒(méi)有問(wèn)題。

如果修改錯(cuò)誤提示為其他文字

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

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

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

  任何疑問(wèn)或者建議,請(qǐng)發(fā)郵件到powereasydeveloper@qq.com

 

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

用戶(hù)登錄