1. 使用预编译语句
预编译语句PreparedStatement是java.sql中的一个接口,继承自Statement接口。通过Statement对象执行SQL语句时,需要将SQL语句发送给DBMS,由DBMS先进行编译后再执行。而预
编译语句和Statement不同,在创建PreparedStatement对象时就指定了SQL语句,该语句立即发
送给DBMS进行编译,当该编译语句需要被执行时,DBMS直接运行编译后的SQL语句,而不需要像
其他SQL语句那样首先将其编译。
PreparedStatement的好处:
① 将参数与SQL语句分离出来,这样就可以方便对程序的更改和延续,同样,也可以减少不必要的错误。(用参数占位符)
② 效率高,大大提高了代码的可读性和可维护性
2.使用ORM框架
防止SQL注入的关键_在于对一些关键字符进行转义,而常见的一些ORM框架,如ibatis、hibernate等,都支持对相应的关键字或者特殊符号进行转义,可以通过简单的配置,很好的预防SQL注入漏洞,降低了普通的开发人员进行安全编程的门槛。
如:通过#符号配置的变量,ibatis能够对输入变量的一些关键字进行转义,防止SQL攻击。
JDBC底层使用PreparedStatement对一些关键字进行了过滤。
3.避免密码明文存放
使用MD5,SHA,SHA1单向加密等功能,单向Hash进行加密得到的密文
4.处理好相应的异常
后台的系统异常,很可能包含了一些如服务器版本、数据库版本、编程语言等等的信息,甚至是数据库连接的地址及用户名密码,攻击者可以按图索骥,找到对应版本的服务器漏洞或者数据库漏洞进行攻击,因此,必须要处理好后台的系统异常,重定向到相应的错误处理页面,而不是任由其直接输出到页面上.