SQL注入及其防范

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方法进行设置参数

加强对用户输入的验证

其实简单来说就是去验证用户输入的内容是否正确,拒绝包含二进制数据、转义序列和注释字符的输入内容,验证输入内容,只接受需要的内容和需要内数据类型,这样可以有效的防止注入攻击

以上
欢迎关注我的知乎:郑铭
github:github

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容