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

分类: 计算机技术
推荐阅读:
Python max()函数 max() 是 Python 中的一个内置函数,用于返回给定可迭代对象中的最大值。
golint是什么 Golint是一个Go语言源代码检测工具;Golint 用于检测诸如命令、注释、语法等代码是否规范。
shell中运行上一条命令 在Linux系统下,一条简单的命令即可实现运行上一条刚刚运行过的命令;
Python breakpoint()函数详细教程 brekpoint()函数是python3.7版本新增的一个内置函数;该函数会在调用时使程序进入调试器中;
Python round()函数 在 Python 中,round() 函数用于将一个浮点数四舍五入到指定的小数位数。它可以接受两个参数:要四舍五入的浮点数和指定的小数位数(默认为 0)。
Linux删除所有与扩展名不匹配的文件 在Linux系统下,当你想删除某个文件夹下没有指定扩展名的所有文件时,你可以使用这条命令来实现,它将会删除目录下所有与扩展名不匹配的文件: