微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP与SQL注入攻击[三]

这几天太忙,继续连载哈哈,争取半个月结束。 上文说到数据库自带的不安全输入过滤功能,但这样的功能不是所有数据库都有的。目前大概只有MysqL,sqlite,Postgresql,Sybase带有这样的功能,而包括Oracle和sqlServer在内的很多数据库都没有。 鉴于这样的情况,一般开发者采用一种通用的方法来避免不安全的数据写入数据库--base64编码。这样可以避免所有可能引起问题的特殊字符造成的危险。但Base64编码后的数据容量大概会增加33%,比较占用空间。在Postgresql中,使用Base64编码数据还有个问题,就是无法使用'LIKE'查询。 所以总结这么多,我们知道光靠数据库自身的字符串屏蔽也是不行的。我们需要一种解决方案,在特殊字符影响到我们的Query语句之前,就把危险的字符过滤掉。预定义查询(Preparedqueries/preparedstatements)是一个非常好的方法。什么是预定义查询呢? 它就相当于一个查询语句的模板,定义了查询语句的结构和某些部份的数据类型。如果我们提交的sql语句符合这个模板的定义,就执行,否则就不执行,报出错误。 例如: pg_query($conn,“PREPAREstmt_name(text)ASSELECT*FROMusersWHEREname=$1”);
pg_query($conn,“EXECUTEstmt_name({$name})”);
pg_query($conn,“DEALLOCATEstmt_name”); PREPAREstmt_name(text)AS..定义了一个查询的格式,这里除了$1之外的所有字符都是占位符,不允许更改。呵呵,我觉得这种方法实在是个好方法。不过可惜不是所有数据库支持。。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐