很多情况因为过滤不严导致很多网站存在sql注入,这里以用户登陆为例,简单举例

首先创建一个测试的数据库

比较基础,不写创建过程了

java代码如下:

packagecn.basic.jdbc;importjava.awt.image.RescaleOp;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importorg.junit.jupiter.api.Test;public classTest1 {/** public static void main(String[] args) throws ClassNotFoundException,

* SQLException { login("aa","aa"); }*/@Testpublic void testlogin() throwsClassNotFoundException, SQLException {

login("aa", "aa");

}public static void login(String username, String password) throwsSQLException, ClassNotFoundException {

Class.forName("com.mysql.jdbc.Driver");

Connection conn= DriverManager.getConnection("jdbc:mysql://127.0.0.1/test", "root", "root");

Statement st=conn.createStatement();

String sql= "select * from xxx where username=" + "'" + username + "'" + "and password=" + "'" +password+ "'";

ResultSet rs=st.executeQuery(sql);if(rs.next()) {

System.out.println("恭喜" + username + "登陆成功");

System.out.println(sql);

}else{

System.out.println("登录失败");

}if (rs != null) {

rs.close();

}/** if (st != null) { st.close(); }*/

if (conn != null) {

conn.close();

}

}

}

运行

输入正确账号密码可以登陆成功。这里可以被绕过。

很显然这是万能密码。那么如何去修复sql注入呢,这里比较好的方法是采用预编译的开发方式,这是个开发习惯问题。

修复后的预编译代码如下:

packagecn.basic.jdbc;importjava.awt.image.RescaleOp;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importorg.junit.jupiter.api.Test;public classTest1 {/** public static void main(String[] args) throws ClassNotFoundException,

* SQLException { login("aa","aa"); }*/@Testpublic void testlogin() throwsClassNotFoundException, SQLException {

login("aa", "aa");

}public static void login(String username, String password) throwsSQLException, ClassNotFoundException {

Class.forName("com.mysql.jdbc.Driver");

Connection conn= DriverManager.getConnection("jdbc:mysql://127.0.0.1/test", "root", "root");

String sql="select * from xxx where username=? and password=?";//使用预编译

PreparedStatement ps =conn.prepareStatement(sql);

ps.setString(1, username);

ps.setString(2, password);

ResultSet rs=ps.executeQuery();if(rs.next()) {

System.out.println("恭喜" + username + "登陆成功");

System.out.println(sql);

}else{

System.out.println("登录失败");

}if (rs != null) {

rs.close();

}if(ps!=null) {

ps.close();

}/** if (st != null) { st.close(); }*/

if (conn != null) {

conn.close();

}

}

}

再来测试下是否存在安全漏洞:

输入正确密码:

尝试万能密码绕过:

这里杜绝了sql注入的产生,在很多时候,要养成用预编译编方式实现增删改查,这里以查询为例子,增删改同理!

预编译并不代表百分百防止sql注入的,这只是一种防止sql注入的措施。

不忘初心,方得始终。

mysql sql注入漏洞修复_从Java角度修复SQL注入漏洞相关推荐

  1. mysql boost 是什么意思_十步完全理解SQL

    我们每天都在写 SQL 并且应用在开源软件 jOOQ 中.于是我想把 SQL 之美介绍给那些仍然对它头疼不已的朋友,所以本文是为了以下读者而特地编写的: 1. 在工作中会用到 SQL 但是对它并不完全 ...

  2. java sql server连接字符串_关于Java:SQL Server的等效jdbc连接字符串

    我目前正在使用以下连接字符串连接到数据库(该数据库与ServerIP在同一服务器上): String constr ="Data Source=ServerIP,1433;Network L ...

  3. java内存漏洞_处理Java程序中的内存漏洞

    Java 程序中也有内存漏洞?当然有.与流行的观念相反,在 Java 编程中,内存治理仍然是需要考虑的问题.在本文中,您将了解到什么会导致内存漏洞以及何时应该关注这些漏洞.您还有机会实践一下在您自己的 ...

  4. sql not exists用法_牛客网数据库SQL实战详细剖析(5160)(更新完结)

    文章来源:大数据肌肉猿 作者:无精疯 这是一个系列文章,总共61题,分6期,有答案以及解题思路,并附上解题的一个思考过程. 具体题目可参考牛客网的SQL实战模块: https://www.nowcod ...

  5. 怎么更改sql的实例版本_学会复杂一点的SQL语句:Oracle DDL和DML

    create:创建表创建用户创建视图 创建表 create table student(id int,score int) ; student后面与括号之间可以有空格可以没有 创建用户 create ...

  6. mysql盲注脱裤_白帽子挖洞—SQL注入篇

    0x00介绍 SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到 ...

  7. mysql慢查询面试题_头条Java岗3面入职:事务+慢查询SQL+Redis+秒杀设计面试题等

    一面 1.讲讲jvm运行时数据库区 2.讲讲你知道的垃圾回收算法 3.jvm内存模型jmm 4.内存泄漏与内存溢出的区别 5. select.epool 的区别?底层的数据结构是什么? 6.mysql ...

  8. java 操作mysql数据库得到错误码_[数据库/Java]数据库开发过程中产生的MySQL错误代码及其解决方案...

    前言 吐槽一下,均是这两天遇到的破烂事儿,搞定了也好,以后出现此类问题也就放心些了. 下列遇到的问题大都是因为MySQL从5.x版本升级到8.0.11(MySQL8.0涉及重大改版)后,跟着连带着出现 ...

  9. java像sql一样处理数据_像Excel一样使用SQL进行数据分析

    Excel是数据分析中最常用的工具 ,利用Excel可以完成数据清洗,预处理,以及最常见的数据分类,数据筛选,分类汇总,以及数据透视等操作,而这些操作用SQL一样可以实现.SQL不仅可以从数据库中读取 ...

最新文章

  1. 表间数据复制--SELECT表中的数据插入到新的表中(ORACLE,MSSQL)
  2. Eclipse下编译Android自带联系人应用
  3. android通讯录项目_Flutter高仿微信项目开源-具即时通讯IM功能
  4. 连接端口 配置hive_Zeppelin带有Kerberos认证的Hive解释器的配置
  5. node --- 创建一个Socket服务器
  6. MyBatis传入参数为list、数组、map写法
  7. 大话设计模式笔记 享元模式
  8. InfoPath Resource Sites
  9. mysql limit 表的长度_mysql中的limit用法有哪些(推荐)
  10. 20130401学习笔记
  11. Handsontable 类似 excel 表格编辑器
  12. 【渝粤教育】国家开放大学2018年秋季 0363-21T市场调查与预测 参考试题
  13. mysql中 s命令_MySQL的基本操作命令
  14. Kotlin中三元运算符
  15. 输入框限制规则 只能输入数字 只能输入字母数字 等等
  16. 新项目六之集成新版友盟统计
  17. altium designer 绘制pcb时如何检查漏线
  18. springcloud实战:springboot的核心原理
  19. 程序员的专属表情包,看了吓一跳
  20. Python--进程池与线程池

热门文章

  1. Android 开发过程中平时遇到的一些问题及总结
  2. 如何修改flash的文字背景颜色?
  3. 浙江3 2计算机学校,浙江省3+2学校
  4. python播放视频代码_python脚本抓取优酷在线视频地址代码
  5. 担任冬奥会火炬手,是一种怎样的体验?
  6. Native memory allocation (mmap) failed to map xxx bytes for committing reserved memory
  7. C. Train and Queries
  8. java计算机毕业设计小型酒店管理系统源代码+数据库+系统+lw文档
  9. linux7救援模式安装文件,CentOS7救援模式--光盘
  10. 辅助角公式的几何意义