久久久久国产精品熟女影院_天天躁日日躁狠狠躁欧美老妇 理论片中文字幕-91亚洲国产成人久久精品网站-视频国

目錄
目錄X

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

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

什么是地址參數(shù)

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

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

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

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

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



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

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

如何修改QueryStrings.config?

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

<queryStrings mode="OnlyList">

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

Page節(jié)的說明

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

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

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

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

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

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

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

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

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

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


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

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

  有些用戶可能對于 參數(shù)錯(cuò)誤,參數(shù)太多,缺少參數(shù)等錯(cuò)誤提示,感覺不夠個(gè)性化或者想要改成英文的。可以通過修改App_GlobalResources文件夾下的ErrorMessage.resx文件。App_GlobalResources是存放資源的文件夾。我們把很多錯(cuò)誤提示都放到了ErrorMessage.resx中,下個(gè)版本我們可能會(huì)提供多語言支持。這個(gè)文件可以用Editplus或者DreamWeave進(jìn)行打開,找到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ò)誤一類的提示時(shí),就要檢查一下Config/QueryStrings.config中,看配置是否和實(shí)際的一樣了。

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

 

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

用戶登錄