程序在什么环境下最安全?这是开发组从最初设计sitefactory时就一直在讨论和研究的问题。在sitefactory 1.0版的开发中,我们用了很多措施来保证系统的相对安全,具体可以查看想博客文章和凯发k8天生赢家官网介绍。今天要给大家介绍的sitefactory™ cms 1.1版中新安全措施中一种——地址参数检查措施。
什么是地址参数
比如我们访问,因为我们系统做了urlrewrite,实际访问的地址是 那么“id=88”就叫做地址参数。
地址传递参数做类型检查有什么好处
以上面的地址为例子,“88”通常用来作为查询条件的,如果处理不好,很容易造成万恶的sql注入漏洞。当然单单就“id=88”来说,堵住漏洞的方法有很多种,感觉最好的办法就是限制用户输入。当我们知道这个页面只接受一个id参数,并且是数字类型的话,那么我们在让用户通过url传递id时,这个参数就只能是数字,是其他类型就给出错误提示,拒绝其进一步的访问。
下面是出错演示:
比如,当我们访问 时,则一切正常。当我们访问 则会出现如下提示:
其他错误提示还有 参数太多,缺少参数,参数错误等提示。
这次在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 类型,那么我们最初访问就不会出错了。
optional参数是代表这个参数是否是必须的。当我们在param中没有加optional或者optional=”true”时,这就代表是这个参数是必须的。optional=”false”就代表是可选的。当我们把参数设置为optional=”true”时,如果我们在访时没有带参数,就会提示“缺少参数错误”。如果设置为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码,需要首先进行转义,比如把“<”变成“<”,把“>”变成“>”。
2 <value><li>缺少参数!li>value>
3 data>
当你的网站出现参数错误一类的提示时,就要检查一下config/querystrings.config中,看配置是否和实际的一样了。
任何疑问或者建议,请发邮件到