sql注入

sql注入问题产生的原因

  1.sql语句的拼接

  2.and or优先级产生的问题

eg:

  select * from t_user where username = 'aaa'or'1=1' and  password = 'sfsdfsds';

在该sql语句中,and优先级高于or,就会优先执行'1=1' and password='sfsdfsds' 结果为false,此时如果知道对应的username,产生的结果就是'aaa' or false 也就是true

解决sql注入问题

* 使用PreparedStatement接口,是Statement的子接口。         

    * 能执行SQL语句         

    * 产生预编译SQL语句的功能,解决SQL注入漏洞。

    * 有预编译的功能,把SQL语句中的参数的部分使用?(占位符)来代替,可以先把编写的SQL语句先发送到 MySQL服务器端,对这条SQL语句进行编译,                  

    * 编译后的SQL语句的格式就是固定的了,再传入任何的值,都会做?的参数来出现。                  

* 掌握的方法         

  * Connection接口提供方法,conn.prepareStatement(String sql)        ‐‐ 预编译SQL语句         

  * 通过PreparedStatement向?传入值             

    * setInt(第一个参数:?的位置,默认从1开始,第二个参数:?号对应的值)             

    * setString()             

    * setXxxx()             

    * setObject()               

    * 执行SQL语句的方法                 

      * executeQuery()            ‐‐ 执行查询,但是没有参数                 

      * executeUpdate()           ‐‐ 执行增删改,没有参数的

posted @ 2025-02-11 16:51  茴香儿  阅读(7)  评论(0)    收藏  举报