在web开发中如何避免sql注入

 时间:2026-02-13 13:11:20

1、第一步:sql注入产生原因。

1、说起sql注入就要说一下java与数据库连接的问题那就是java.sql.Statement对象;

2、java.sql.Statement对象执行的是拼接的sql也就是说它直接执行sql。此时当你传入的参数是一个sql语句的时候就会造成sql操作安全问题。

如下图:不管入参是什么它都会将其当做一个语句执行

3、也是用户web前台输入的参数未限制。

在web开发中如何避免sql注入

2、第二步:创建表和自段。

1、创建一个库如果已经存放用已有的也可以

2、创建一个表test字段如下图所示;

在web开发中如何避免sql注入

在web开发中如何避免sql注入

在web开发中如何避免sql注入

3、第三步:问题演示。

1、创建一个javaweb工程。

2、引入mysql数据库驱动包

3、编写代码

3.1编写数据库连接

3.2 编写测试代码(使用更新删除或者其它注入危害为更大,如在后面拼接一条删除语句)

public static void testStatement(){

String name = "'zhan'  or 1=1";

String sql = "select * from test where name = "+name;

 

Connection conn = getConnection();

try {

st = conn.createStatement();

ResultSet rs = st.executeQuery(sql);

while(rs.next()){

                System.out.println("id:"+rs.getString("id")+" name:"+rs.getString("name")+" age"+rs.getString("age")+" sex:"+rs.getString("name"));

            }

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

3.3 main方法调用查询

在web开发中如何避免sql注入

在web开发中如何避免sql注入

在web开发中如何避免sql注入

在web开发中如何避免sql注入

4、第三步:使用PreparedStatement。

1、总结第一次出现本不应该查出数据却获得所有数据的原因是Statement对象会将整个sql当作原生语句执行它没有区分变量和sql的能力。

2、借助于java.sql.PreparedStatement填充变量,其会将变量当做值去执行sql,而不会将其当做sql执行,并且有预编译功能查询效率更高。

public static void testPreparedStatement(){

String name = "'zhan'  or 1=1";

String sql = "select * from test where name = ?";

 

Connection conn = getConnection();

try {

pst = conn.prepareStatement(sql);

pst.setObject(1, name);

 

ResultSet rs = pst.executeQuery();  

while(rs.next()){

               System.out.println("id:"+rs.getString("id")+" name:"+rs.getString("name")+" age"+rs.getString("age")+" sex:"+rs.getString("name"));

           }

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

3、执行测试,查询结果为空

在web开发中如何避免sql注入

在web开发中如何避免sql注入

在web开发中如何避免sql注入

在web开发中如何避免sql注入

5、第三步:查询之前校验数据。

1、web前端使用js的正则表达式在前台文本中做输入校验

2、在java后台做输入校验,如使用过滤器统一校验。或者自己单独在controller中校验。

  • IJ下载JDK如何配置版本为15#校园分享#
  • 如何进行商标监测,预防商标/品牌被侵权?
  • java基础9.4.1 大数字计算之BigInteger
  • 荣耀耳机flypods3怎么连接手机
  • mssql 如何获取同步信息
  • 热门搜索
    什么是酸雨 d3是什么 什么是安置房 两个务必是什么 勾稽关系是什么意思 铁皮石斛的功效是什么 玄武岩是什么岩 q345r是什么材质 meter是什么意思 订单号是什么