什么是MySql注入,怎么防止MySql注入。

什么是MySql注入

1、先来看百度百科是怎么说的

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

简单说,就是我们在拼接sql的时候,没有过滤用户的非法sql,导致查询结果和我们预想的不一样。

2、举个简单例子来帮助理解(实际开发中可能不存在这种简单的错误)

2-1:比如我们要根据用户名和密码进行登录,我们后台sql这样写

SELECT * FROM user WHERE username = ? and password = ?

2-2:我们预想的:用户输入 username:张三,password:123456

2-3:但实际人家黑客这样输入: username:张三,password: " or 1 = 1 –

2-4:根据黑客输入的参数,我们的sql将变成这样了

SELECT * FROM user WHERE username = "张三" and password = "" or 1 = 1 -- "

后面这个 – 就是注释,它注释了后面的其它内容,整个sql就变成下面这样,因为 or 1 = 1,所以怎么都会出结果

SELECT * FROM user WHERE username = "张三" and password = "" or 1 = 1

2-5: 当然了上面只是一个简单的sql注入,有人说实际开发中,我们根本不会这样去做。当然了实际情况中黑客也比我牛批一亿倍,这个例子是为了让你简单理解什么是sql注入。


怎么防止sql注入,通过上面的解释我们知道sql注入,是通过字符串动态sql拼接的。

  • 1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双"-"进行转换等。
  • 2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
  • 3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
  • 4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
  • 5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
发布了302 篇原创文章 · 获赞 127 · 访问量 52万+

猜你喜欢

转载自blog.csdn.net/Tomwildboar/article/details/103768764
今日推荐