数据的安全性与一致性中的几个要点
10月 21, 2008 – 11:27 下午数据完整性的原则:应用程序内部的数据是有用的,换句话说就是引入的数据在边界处被过滤,以过滤后的结果存储,在输出数据的时不再需要做任何处理。在过滤数据时要分清好的,有效的,无效的数据的处理。
基于以上原则在做web程序设计是要注意以下几点:
1.过滤不支持的编码格式
如果你的整个体系里面用的是utf-8编码,那么你就在数据输入的时候过滤或者转化掉其他编码的字符.
相关php方法: utf8_encode($input), iconv(”utf-8″,”utf-8″,$str);注后者要装iconv扩展
2.过滤控制字符
很多时候输入中含有控制字符,这此控制字符虽然是有效的数据,但不是良好的数据。这时候最好把控制字符给过滤掉,可以简单的把小于0×20的 ascii字符过滤之。
相关方法:
1. preg_replace(’!\p{C}!u’,”,$data)//清除所有控制字符
2.preg_replace(’!\r\n?’,'\n’,$input) //统一所有平台的回车,还省空间
3.过滤html
html的过滤比较头痛,可以用strip_tags()进行过滤,所有的html标签,但是想有选择的过滤html就比较惨了。这时个可以要你写比较复杂的正则表达式。
注:把所有的外部来源的数据当成是感染过的数据是重要的,只有你自己消除感染的数据才是安全的。
有时间 可以看一下lib_filter(http://code.iamcal.com/php/lib_filter)
4.防止sql注入攻击:
原则:不要赋于用户超出他们所需的权限。
web应用程序永远也不应该需要create,drop,alter权限,如果需要,那么很可能是在基本程序设计上有问题。
对于只读的数据库,没有必要发放insert ,updata,delete 权限。
字符串型过滤相关php方法:
AddSlashes() ,mysql_escape_string()
整形过滤 : interval(input)
注意如果用到like或者rlike操作时还要过滤相关字符串中的“%”与“_”两个符号。
数据净化原则:净化代码在物理位置上应该和使用数据的代码相邻,避免过早净化,就可以快速查看代码,确认是否正确进行了转义了数据。

3 Responses to “数据的安全性与一致性中的几个要点”
安全第一。
[回复此评论]
By 时 on Oct 27, 2008
strip_tags 函数可以选择不被过滤的html标记,比如strip_tags($text, ‘‘),可以保留$text里边的p 和 a 标记
[回复此评论]
果沟 reply on 11月 1, 2008:
有道理可以解决一些问题
[回复此评论]
By comdeng on Nov 1, 2008