Java如何避免sql注入详解

2022年01月14日 阅读数:2
这篇文章主要向大家介绍Java如何避免sql注入详解,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

sql注入是web开发中最多见的一种安全漏洞。能够用它来从数据库获取敏感信息、利用数据库的特性执行添加用户、导出文件等一系列恶意操做,甚至有可能获取数据库乃至系统用户最高权限。web

形成sql注入的缘由:

程序没有有效过滤用户的输入,使攻击者成功的向服务器提交恶意的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 页面