1.什么是SQL注入
在java中无论是使用orm框架还是直接使用JDBC操作数据库我们经常都会碰到拼接字符串的情况,例如以下:
String sql = "select * from tableA where username = " + username + ";";
那么操作输入的字符串username来修改我们的操作数据库语句例如
username = "zhengming; drop table tableB";
那么执行本条语句后tableB表将会被删除,这就是我们常说的SQL注入攻击
2.如何防范
说完了什么是SQL攻击后那么久要说说如何进行防范,主要的防范方法有以下几种:
- 严格区分普通用户权限与管理用户权限
- 使用参数化语句(即使用占位符)
- 加强对用户输入内容的验证
- 使用专业的软件对SQL漏洞进行扫描
以下将对前三种防范措施进行说明
严格区分普通用户权限与管理员权限
对于普通用户即应用使用者一般只给予读取权限和部分写权限,至于删除表和删除数据库这样的权限应当予以限制,而对于数据库管理员来说就应当给予更高的权限以便维护数据库
使用参数化语句
无论使用orm框架还是直接使用JDBC操作数据库,只要稍微了解应该都知道占位符?的用处即代表此处为一个参数,通过后期设置的方式进行填充
String sql = "select * from tableA where username = ?;"
而后通过set方法进行设置参数
加强对用户输入的验证
其实简单来说就是去验证用户输入的内容是否正确,拒绝包含二进制数据、转义序列和注释字符的输入内容,验证输入内容,只接受需要的内容和需要内数据类型,这样可以有效的防止注入攻击
网友评论