很多时候开发人员只关系系统的功能的实现,很多系统开发人员甚至sql的安全全然不知,那么在开发中的sql具体有哪些注意点?这里我们就跟随笔者一起看看sql注入和相关的防范措施吧!
sql注入简介
sql注入就是利用系统接口将用户提交的数据插入数据库的过程中添加一些语法合适但是却违背接口提供功能的正常的执行sql过程。主要产生的原因是没有对用户提交的数据进行严格的过滤,导致非法sql语句的执行。
sql注入危害极大,攻击者可以利用它读取、修改或者删除数据库中的数据,获取用户名和密码等信息。甚至可以获取到数据库管理员的权限。当然sql注入也很难防范。
sql注入实例
对于一个信息系统来说或post或get请求,然后上送一些检索条件语句,这些条件语句如果没有处理直接拼接到sql的where条件上就会存在sql注入的问题,比如对于对于select * from user_Info where user_name={userName} and password={password}的sql来说,如果前端的接口上送的用户名称为userName=%%’ limit 1 #(#和*表示注释掉后边的sql) 然后密码随便输入,这样就得到了系统的第一个账户并登录成功,当然对一些恶意攻击者甚至会执行delete或者drop等命令。所以说sql注入对开发来说是一个重要的话题。
应对措施
1、prepareStatement
在java中使用prepareStatement可以对上送的条件中的特殊字符进行转义,从而使的上送的非法sql操作变成字符串(添加转义符号\)。一般来说的操作过程如下:
prepare=con.prepareStatement(sql);
prepare.setString(userName,name);
prepare.setString(password,password);
rs=prepare.executeQuery();
2、自定义函数进行校验
对用户提交数据的已知的非法字符的校验,只接收已知的合法的输入。当然对于空格的检测和注释符号#的判断是至关重要的,在校验的时候可以对空格和注释符号进行过滤将过滤很多sql攻击。当然也要注意过滤十六进制的表示%XX