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

2025-05-24 12:42:21

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中校验。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢