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

作者:动易网络 来源:本站原创 点击数: 发布时间:2008年06月04日

    程序在什么环境下最安全?这是开发组从最初设计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”通常用来作为查询条件,即SELECT * FROM TableName WHERE ItemId=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),首先看到第一行


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节 我们不能预知在线支付接口那里会返回多少个参数,我们就设置为false。,但是我们在page下设置的页面参数,仍然会进行检查。

注意:page ,abortOnError是区分大小写的,大家在修改或者添加配置时不要写错了。

 

page节下的param节

在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时,我们还可以设定参数的长度。类似的情况如下:

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

 

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

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


   
  • 缺少参数!

  •  

    当你的网站出现参数错误一类的提示时,就要检查一下Config/QueryStrings.config中,看配置是否和实际地址一样了。
    任何疑问或者建议,请发邮件到powereasydeveloper@qq.com 或者站内短信。