小编给大家分享一下Java中怎么避免sql注入,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
前言
sql注入是web开发中最常见的一种安全漏洞。可以用它来从数据库获取敏感信息、利用数据库的特性执行添加用户、导出文件等一系列恶意操作,甚至有可能获取数据库乃至系统用户最高权限。
造成sql注入的原因:
程序没有有效过滤用户的输入,使攻击者成功的向服务器提交恶意的SQL脚本,程序在接收后错误的将攻击者的输入作为SQL语句的一部分执行,导致原始的查询逻辑被改变,执行了攻击者精心构造的恶意SQL语句。
如从用户表根据用户名admin和密码123查用户信息
select * from User where username = 'admin' and password = '123'
攻击者恶意修改用户名参数 admin-->xxxx or 1=1 --
select * from user where username = 'xxxx' or 1=1 --and password = '123'
SQL中--是注释标记,如果上面这个SQL被执行,就可以让攻击者在不知道任何用户名和密码的情况下成功登录。所以,防止sql注入至关重要
预防sql注入方法:
严格限制Web应用的数据库的操作权限,给连接数据库的用户提供满足需要的最低权限,最大限度的减少注入攻击对数据库的危害
对进入数据库的特殊字符进行转义处理,或编码转换
校验参数的数据格式是否合法(可以使用正则或特殊字符的判断)
预编译SQL (Java中使用PreparedStatement),参数化查询方式,避免SQL拼接
使用mybatis的"#{}“预编译,将传入的值按照字符串的形式进行处理
发布前,利用工具进行SQL注入检测
报错信息不要包含SQL信息输出到 Web 页面
java 有效的防止SQL注入
永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双"-"进行转换等。
永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。
以上是“Java中怎么避免sql注入”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!