Java中如何避免sql注入实例详解

作者:UnIQUE?Eason 时间:2022-08-24 14:42:06 

前言

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注入

1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双"-"进行转换等。

2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。

3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。

5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。

来源:https://blog.csdn.net/weixin_47390965/article/details/122448362

标签:java,sql,注入
0
投稿

猜你喜欢

  • Android编程判断当前应用是否在后台运行的方法示例

    2021-10-29 12:09:36
  • Android Recyclerview实现多选,单选,全选,反选,批量删除的功能

    2021-12-10 21:57:24
  • c#唯一值渲染实例代码

    2023-09-06 06:54:16
  • SpringBoot集成RabbitMQ和概念介绍

    2022-06-25 18:36:24
  • Hibernate中的多表查询及抓取策略

    2022-02-22 18:58:28
  • 深入浅析C#泛型类型

    2023-01-30 06:45:54
  • Struts和servlet不能共存问题解决方法

    2022-09-20 07:26:59
  • Redis 订阅发布_Jedis实现方法

    2023-11-10 03:38:41
  • Java基础之数组详解

    2021-08-06 08:15:28
  • Android实现基于ViewPager的无限循环自动播放带指示器的轮播图CarouselFigureView控件

    2022-06-25 19:04:23
  • c# 使用异步编程的方法

    2023-09-29 02:27:32
  • Android防止按钮过快点击造成多次事件的解决方法

    2022-03-30 08:35:58
  • mybatis如何使用Criteria的and和or进行联合查询

    2023-02-23 00:44:13
  • Android实现圆圈倒计时

    2022-08-03 15:03:29
  • C#实现读写ini文件类实例

    2023-09-06 18:47:00
  • Android Kotlin使用SQLite案例详解

    2022-11-01 19:20:37
  • C++多重继承二义性原理实例解析

    2021-10-08 20:18:33
  • java实现截取PDF指定页并进行图片格式转换功能

    2023-08-24 02:58:56
  • Java class文件格式之访问标志信息_动力节点Java学院整理

    2022-10-31 18:57:29
  • C++实现LeetCode(9.验证回文数字)

    2023-06-21 00:20:38
  • asp之家 软件编程 m.aspxhome.com