目录
目录X

SiteFactoryCMS1.1版新增功能快递:URL地址传递参数的数据类型检查

  程序在什么环境下最安全?这是开发组从最初设计SiteFactory时就一直在讨论和研究的问题。在SiteFactory 1.0版的开发中,我们用了很多措施来保证系统的相对安全,具体可以查看想博客文章和官网介绍。今天要给大家介绍的SiteFactory™ CMS 1.1版中新安全措施中一种——地址参数检查措施。

什么是地址参数

  比如我们访问www.powereasy.net/item/88.aspx,因为我们系统做了UrlRewrite,实际访问的地址是www.powereasy.net/item.aspx?id=88 那么“Id=88”就叫做地址参数。

地址传递参数做类型检查有什么好处

  以上面的地址为例子,“88”通常用来作为查询条件的,如果处理不好,很容易造成万恶的SQL注入漏洞。当然单单就“ID=88”来说,堵住漏洞的方法有很多种,感觉最好的办法就是限制用户输入。当我们知道这个页面只接受一个ID参数,并且是数字类型的话,那么我们在让用户通过url传递Id时,这个参数就只能是数字,是其他类型就给出错误提示,拒绝其进一步的访问。

下面是出错演示:

  比如,当我们访问 www.powereasy.net/item.aspx?id=88时,则一切正常。当我们访问www.powereasy.net/item.aspx?id=d’d 则会出现如下提示:



 其他错误提示还有 参数太多,缺少参数,参数错误等提示。

  这次在SiteFactory 1.1版中已经默认开启了这个验证。我们对于所有前台的页面(管理后台由于站长可以改目录使别人猜不到而没有做判断)也都在Config/QueryStrings.config中进行了配置。

如何修改QueryStrings.config?

  用Editplus或者其他文本编辑器打开这个文件(Config/QueryStrings.config),首先看到第一行

<queryStrings mode="OnlyList">

  Mode这里作用是设置参数检查的方式。OnlyList的意思是只检查QueryStrings.config中列出的文件。我们也可以设为All,这样就是所有请求网站的aspx文件都会被检查。如果这些文件没有被配置在QueryStrings.config中,那么就说明这些文件是不允许带任何参数的。

Page节的说明

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

  在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="Id" datatype="Int" optional="true" />

  在param节中,name就是参数名,实际地址中是什么就要写什么,name值不区分大小写。datatype 代表的是这个参数的数据类型,datatype的值是区分大小写的。Int表示只接受数字类型的。Datatype还有String,Bool等共三种类型。如果我们把id的datatype改成了String 类型,那么我们最初访问www.powereasy.net/item.aspx?id=d’d就不会出错了。

  optional参数是代表这个参数是否是必须的。当我们在param中没有加optional或者optional=”true”时,这就代表是这个参数是必须的。optional=”false”就代表是可选的。当我们把参数设置为optional=”true”时,如果我们在访www.powereasy.net/item.aspx时没有带参数,就会提示“缺少参数错误”。如果设置为optional=”false”,那么就不会提示这个错误。

  另外对于param,当数据类型是String时,我们还可以设定参数的长度。类似的情况如下:    

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


  这时的Pay只能接受3个字符长度的参数,当我们传递给Pay=aabc时,就会提示出错。而传递给Pay=aab时,就没有问题。

如果修改错误提示为其他文字

  有些用户可能对于 参数错误,参数太多,缺少参数等错误提示,感觉不够个性化或者想要改成英文的。可以通过修改App_GlobalResources文件夹下的ErrorMessage.resx文件。App_GlobalResources是存放资源的文件夹。我们把很多错误提示都放到了ErrorMessage.resx中,下个版本我们可能会提供多语言支持。这个文件可以用Editplus或者DreamWeave进行打开,找到PageParamLessThen、PageParamMoreThen、PageParamNotContains、PageParamUnequal等几个参数,修改value中的值就可以了。如果想要在value中嵌入html码,需要首先进行转义,比如把“<”变成“&lt;”,把“>”变成“&gt;”。

1 <data name="PageParamLessThen" xml:space="preserve">
2     <value><li>缺少参数!</li></value>
3  </data>

  当你的网站出现参数错误一类的提示时,就要检查一下Config/QueryStrings.config中,看配置是否和实际的一样了。

  任何疑问或者建议,请发邮件到powereasydeveloper@qq.com

 

【打印正文】 发布时间:2008-06-04 15:50:30 浏览次数: 作者:bbsh 来源:本站原创
×

用户登录