万能用户名和万能密码

本文探讨了SQL注入攻击中的万能用户名和万能密码,如'any' union select * from user – 和 'any' or 1='1。介绍了如何通过PDO预处理语句来防御此类攻击,强调了在使用empty()函数时的陷阱,并提供了防止万能密码入侵的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

万能用户名

any’ union select * from user – (后面有个注释符)
联合查询,是查询的结果大于1,为真

万能用户名防御
PDO

$username=$REQUEST['usernm'];
$password=$_REQUEST['passwd'];
$pdo=new PDO("mssql:host=127.0.0.1;dbname=users","sa","root");
$sql="select * from users where username=? and password=?";
$statment=$pdo->prepare($sql);
$statment->execute(array($username,$password));
$res=$statment->fetch();
if(!empty($res)){
header("location:success.php");
}
else{
header("location:failure.php");
}

解释:
给PDO这个类赋值,赋给pdo这个对象
sql数据库中的查询语句赋值给$sql
pdo这个对象使用方法prepare() 给sql语句固定一个模式
为 prepare 方法准备要执行的SQL语句,SQL语句可以包含零个或多个命名(:name)或问号(?)参数标记,参数在SQL执行时会被替换。
你不能在 SQL 语句中同时包含命名(:name)或问号(?)参数标记,只能选择其中一种风格。
预处理 SQL 语句中的参数在使prepare方法时会传递真实的参数。

通过execute将数组array输入
执行准备查询–execute()方法
execute()方法负责执行准备好的查询
该方法需要有每次迭代执行中替换输入的参数。可以通过两种方法实现:作为数组将值传递给方法
Statment->来获取结果
empty()函数是用来测试变量是否已经配置。
若变量已存在、非空字符串或者非零

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值