手机
当前位置:查字典教程网 >编程开发 >php教程 >PHP与SQL注入攻击[三]
PHP与SQL注入攻击[三]
摘要:这几天太忙,继续连载哈哈,争取半个月结束。上文说到数据库自带的不安全输入过滤功能,但这样的功能不是所有数据库都有的。目前大概只有MySQL,...

这几天太忙,继续连载哈哈,争取半个月结束。

上文说到数据库自带的不安全输入过滤功能,但这样的功能不是所有数据库都有的。目前大概只有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之外的所有字符都是占位符,不允许更改。呵呵,我觉得这种方法实在是个好方法。不过可惜不是所有数据库都支持。。

【PHP与SQL注入攻击[三]】相关文章:

PHP获取数组的键与值方法小结

如何对PHP程序中的常见漏洞进行攻击(上)

PHP中的超全局变量

PHP+MYSQL中文乱码问题

PHP文件操作方法汇总

PHP下MAIL的另一解决方案

PHP查找与搜索数组元素方法总结

提升PHP执行速度全攻略

PHP.MVC的模板标签系统(三)

PHP编程与应用

精品推荐
分类导航