SQL注入万能语句' or 1='1详解

' or 1='1是SQL注入的万能语句,可以通过它轻松改变SQL语句的逻辑关系,从而产生背离原SQL语句的效果,比如绕过用户密码验证;

假设存在以下用户信息表:

id username password
1 hello world

存在以下sql语句用于验证username和password是否正确,如正确则存在查询结果,不正确则没有查询结果,表示用户名或密码错误:

SELECT * FROM test.user WHERE username='hello' and password='world';

当输入的用户名为hello,密码为world时存在查询结果,表示用户名与密码输入正确;

可是,永远不要相信用户的输入;因为上面这条SQL语句存在SQL注入漏洞,且看:

SELECT * FROM test.user WHERE username='' or 1='1' and password='anyxxxxx';

当username值为' or 1='1时,SQL语句的逻辑表达式结构被修改了,因为 or 1='1' ,致使不论密码是否正确,其验证都将通过;

这就是一个典型的通过SQL注入绕过用户名与密码验证的漏洞!

如何防范SQL注入

永远不要相信用户的输入;要对用户的输入进行过滤和参数化;

永远不要使用以下方法组合SQL语句:

sql = `SELECT * FROM test.user WHERE username='` + username + `' and password='` + password + `';`

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/sql-injection-statement.html

分类: 计算机技术
推荐阅读:
使用requests请求后的响应内容 使用Requests进行get请求或post请求后,requests会返回一个Response对象;
Python实现字符串大小写转换 你可能会使用字符串的upper()方法将字符串中的字母全部转换成大写,或使用lower()方法将字符串中的字母全部转换成小写;那如何将字符串中的大写转换成小写、小写转换从大写呢?本文将使用Python实现这一功能;
Python super()函数 super() 函数用于调用父类的方法。当子类重写了父类的方法后,如果想要在子类中调用父类的方法,就可以使用 super() 函数。使用 super() 函数可以避免硬编码父类的名称,使代码更具可读性和可维护性。
PySide6控件教程中的一些约定 在本教程中,我们将介绍一些在PySide6中使用控件时的常用代码和内容约定,以帮助您编写易于理解、易于维护和高质量的GUI应用程序。
如何查看Golang版本 不论是Windows,还是Linux环境,要查看Golang版本,只需要在命令行(CMD)或Shell中输入命令:
Golang创建一百万个轻量级线程并同时执行 Go语言在语言级别支持轻量级线程,叫 goroutine,执行时只需要4-5k的内存,比线程更易用,更高效轻便,调度开销更小,可同时运行上千万个并发。