什么是sql注入攻击
在阅读这篇文章之前,我们必须要了解sql注入攻击的原理,下面我们使用一个简单的实例来介绍sql注入攻击,以php语言为例:
$username=\"manongjc\";
$pwd=\"123\";
$sql = \"SELECT * FROM table WHERE username = \'{$username}\' AND pwd = \'{$pwd}\'\";
此时sql语句为:
SELECT * FROM table WHERE username = \'manongjc\' AND pwd = \'123\'
这个sql语句没有问题,当数据库中存在用户名为manongjiaoc密码为123时,会查询出结果,否则不会查询到任何数据。
再看下面一种情况:
$username=\"manongjc\";
$pwd=\"123\' or \'1\'=\'1\";
$sql = \"SELECT * FROM table WHERE username = \'{$username}\' AND pwd = \'{$pwd}\'\";
此时sql语句为:
SELECT * FROM table WHERE username = \'manongjc\' AND pwd = \'123\' or \'1\'=\'1\'
这个时候or是mysql关键字,后面永远为真,所以能查询到结果。这就是SQL注入攻击。
使用bind_param()参数绑定来防止SQL注入攻击
我们这样写就不会存在SQL注入攻击了:
<?php
$username=\"manongjc\";
$pwd=\"123\' or \'1\'=\'1\";
$sql = \"SELECT * FROM table WHERE username = \'{$username}\' AND pwd = \'{$pwd}\'\";
bindParam($sql, 1, $username, \'STRING\'); //以字符串的形式.在第一个问号的地方绑定$username这个变量
bindParam($sql, 2, $pwd, \'STRING\'); //以字符串的形式.在第二个问号的地方绑定$pwd这个变量
echo $sql;
?>
sql输出如下:
SELECT * FROM table WHERE username = \'aaa\' AND pwd = \'fdsafda\\\' or \\\'1\\\'=\\\'1\' 继续阅读与本文标签相同的文章
上一篇 :
一个程序员的离职成本,很恐怖
下一篇 :
php使用mysqli扩展类连接数据库
-
华为打回欧洲市场!HMS取得重大成功,大量APP接入!谷歌慌不慌?
2026-05-14栏目: 教程
-
PS保存图片提示“无法完成请求”,这里有4种解决方法!
2026-05-14栏目: 教程
-
想买1000元左右的5G手机?我们需要等多久?
2026-05-14栏目: 教程
-
剧情反转?美企主动购买华为5G技术,华为成赞赏排行榜第一名!
2026-05-14栏目: 教程
-
城市数字化后,新一代内生安全系统可全方位保护
2026-05-14栏目: 教程
