从Java角度修复SQL注入漏洞
2018-05-28 23:00
441 查看
很多情况因为过滤不严导致很多网站存在sql注入,这里以用户登陆为例,简单举例
首先创建一个测试的数据库
比较基础,不写创建过程了
java代码如下:
package cn.basic.jdbc; import java.awt.image.RescaleOp; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.junit.jupiter.api.Test; public class Test1 { /* * public static void main(String[] args) throws ClassNotFoundException, * SQLException { login("aa","aa"); } */ @Test public void testlogin() throws ClassNotFoundException, SQLException { login("aa", "aa"); } public static void login(String username, String password) throws SQLException, 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注入呢,这里比较好的方法是采用预编译的开发方式,这是个开发习惯问题。
修复后的预编译代码如下:
package cn.basic.jdbc; import java.awt.image.RescaleOp; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.junit.jupiter.api.Test; public class Test1 { /* * public static void main(String[] args) throws ClassNotFoundException, * SQLException { login("aa","aa"); } */ @Test public void testlogin() throws ClassNotFoundException, SQLException { login("aa", "aa"); } public static void login(String username, String password) throws SQLException, 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注入的措施。
不忘初心,方得始终。
相关文章推荐
- 从Java的角度修复文件下载漏洞
- 从Java的角度简单修复Cookie越权漏洞
- 从Java的角度修复CSRF漏洞
- 【java】Java再爆漏洞,甲骨文紧急修复
- weblogic打补丁修复JAVA反序列化漏洞
- java或者jsp中修复会话标识未更新漏洞
- Java再爆漏洞,甲骨文紧急修复
- 修复SQL注入漏洞的两种方法
- 如何预防SQL注入,XSS漏洞(spring,java)
- PHP sql注入漏洞修复(字符串型)
- Java反射库中的安全漏洞在30个月后终于修复了(转)
- 甲骨文发布Java补丁程序 修复27处漏洞
- 从Java的角度理解设计模式85: 继续演化:对违反DIP原则的修复和应用创建型模式的展望
- 甲骨文发布Java补丁程序 修复27处漏洞
- php中sql注入漏洞示例 sql注入漏洞修复
- 修复SQL注入漏洞的两种方法
- weblogic服务器部署web代理修复weblogic的JAVA反序列化漏洞
- 甲骨文发布Java紧急更新 专家称未修复漏洞
- java或者jsp中修复会话标识未更新漏洞
- Weblogic Java反序列化漏洞修复3