什么是SQL注入?带你从零开始认识SQL注入


本文摘自PHP中文网,作者php是最好的语言,侵删。

从零开始认识SQL注入 ,什么是SQL注入?sql注入就是本来我只有我能操作数据库,本来只是让你输入内容就走,而你却输入命令,从而在我不知情下操作数据库

SQL注入

1.什么是SQL注入

  • 看一下下面的案例场景,这是正常情况下的登陆场景:

a.png

  • 而当我们使用 用户名‘:?C 的时候,密码随便输入也可以登陆成功↓

b.png

  • 这时候对比两条sql就能发现,其实用户通过在用户名写入的sql符号将内部sql提前结束,并且将后半句检索条件注释起来达到免密码登陆效果。

sql注入就是本来我只有我能操作数据库,本来只是让你输入内容就走,而你却输入命令,从而在我不知情下操作数据库

2.漏洞的修复

  • 会产生上门面的情况是因为上面的sql是使用动态拼接的方式,所以sql传入的方式可能改变sql的语义。

动态拼接就是在java中java变量和sql语句混合使用:select * from user where userName=’”+userName+”’ and password = ‘”+password”’

  • 所以要使用preparedStatement的参数化sql,通过先确定语义,再传入参数,就不会因为传入的参数改变sql的语义。(通过setInt,setString,setBoolean传入参数)

3.参数化sql使用案例

1

2

3

4

5

6

7

8

9

10

11

12

13

//建立数据连接

conn=ds.getConnection();

//1.设置prepareStatement带占位符的sql语句

PreparedStatement ptmt = conn.prepareStatement("select * from user where userName = ? and password = ?");

ptmt.setString(1, "张三");      //2.设置参数

ptmt.setString(2, "123456");

rs=ptmt.executeQuery();    

 

while(rs.next()){

    System.out.println("登陆成功");

    return;

}

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

参数化特点:

1.设置preparedStatement带占位符的sql语句

statement执行sql语句的方式:

1

2

stmt=conn.createStatement();

rs=stmt.executeQuery("select userName from user");

2.设置参数

PerparedStatement继承于Statement,这里主要使用的使他参数化sql的特性。

转:https://blog.csdn.net/qq_30258957/article/details/78145885

加:1.都是用来执行SQL的 PreparedStatement extends Statement;

2.Statement适合执行静态(无条件)SQL PreparedStatement适合执行动态(有条件)SQL;

3.PreparedStatement可以避免注入攻击;

相关文章:

一个自认为很安全的PHP防SQL注入 求破解

深入了解SQL注入和预防措施

相关视频:

防御sql注入-PHP实战商城开发视频教

以上就是什么是SQL注入?带你从零开始认识SQL注入的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

如何使用pdo查询mysql避免SQL注入的方法

什么是SQL注入漏洞

什么是SQL注入、xss和csrf?

mysql怎样防止SQL注入问题

常见SQL注入的方法

预编译为什么可以防止SQL注入

如何防止SQL注入攻击?

快速了解SQL注入基本原理

SQL注入的三种方式是什么

确定SQL注入死透了么?

更多相关阅读请进入《SQL注入》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...