应用开发中防止SQL注入采取的应对措施

对于上面提到的SQL 注入隐患,后果可想而知是很严重的,轻则获得数据信息,重则可以将数据进行非法更改。那么对这种情况有没有防范措施呢?

1、PrepareStatement+Bind-variable

对Java、JSP 开发的应用,可以使用PrepareStatement+Bind-variable 来防止SQL 注入,另
外从PHP 5 开始,也在扩展的MySQLI 中支持PrepareStatement,所以在使用这类语言作数
据库开发时,强烈建议使用PrepareStatement+Bind-variable 来实现,而尽量不要使用拼接的
SQL,下面以Java 为例说明一下实现方法:

String sql = "select * from users u where u.id = ? and u.password = ?";
preparedstatement ps = connection.preparestatement(sql);
ps.setint(1,id);
ps.setstring(2,pwd);
resultset rs = ps.executequery();

 

2、使用应用程序提供的转换函数

很多应用程序接口都提供了对特殊字符进行转换的函数,恰当地使用这些函数,可以
防止应用程序用户输入使应用程序生成不期望的语句。
 MySQL C API:使用mysql_real_escape_string() API 调用。
 MySQL++:使用escape 和quote 修饰符。
 PHP:使用mysql_real_escape_string()函数(适用于PHP 4.3.0 版本)。从PHP 5 开始,
可以使用扩展的MySQLI,这是对MySQL 新特性的一个扩展支持,其中的一个优点就是支持
PrepareStatement。
 Perl DBI:使用placeholders 或者quote()方法。
 Ruby DBI:使用placeholders 或者quote()方法。

3、自己定义函数进行校验

如果现有的转换函数仍然不能满足要求,则需要自己编写函数进行输入校验。输入验
证是一个很复杂的问题。输入验证的途径可以分为以下几种:
 整理数据使之变得有效;
 拒绝已知的非法输入;
 只接受已知的合法输入。
所以如果想要获得最好的安全状态,目前最好的解决办法就是对用户提交或者可能改
变的数据进行简单分类,分别应用正则表达式来对用户提供的输入数据进行严格的检测和验
证。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值