做企业网站设计手机站,博物馆网站建设方案报价,沈阳做企业网站的公司,手机版传奇发布网站在 MySQL 中#xff0c;转义字符用于处理特殊字符,以防止语法错误或 SQL 注入攻击,而单双引号都是需要重点注意的字符
可以用转义符\ 和 两个连续的引号 来起到转义引号的作用
转义符转义:
这是users表中的数据 如果查询admin 或者 admin 用户,可以用转义符\ 两个连…在 MySQL 中转义字符用于处理特殊字符,以防止语法错误或 SQL 注入攻击,而单双引号都是需要重点注意的字符
可以用转义符\ 和 两个连续的引号 来起到转义引号的作用
转义符转义:
这是users表中的数据 如果查询admin 或者 admin 用户,可以用转义符\ 两个连续的引号转义:
可以用两个连续的单引号完成转义单引号操作 又或者 可以看到语句正常执行并且中间的四个单引号被转义成两个单引号
如果不连续,就会报错 其中第二条命令在两个单引号之后插入了1 语句没有报错,只是没有查询到 admin1 这个用户名
第三条命令报错信息为near 1 at line 1
也就是认为admin是正常的字符串,而后面的 1 格式不对从而导致报错
SQL注入中的演示:
以sqli-labs 第11关为例: 这一关是输入框 代码中的查询语句:
$sqlSELECT username, password FROM users WHERE username$uname and password$passwd LIMIT 0,1;
可以看到是用单引号包围了$uname 和 $passwd 参数,这题是有报错信息回显的
用户名输入admin\ 密码输入 123 会报错 near 123 LIMIT 0,1 at line 1 是因为转义符转义了单引号变成
where usernameadmin\ and password123 LIMIT 0,1;
单引号中的内容匹配的是 admin\ and password 后面的123 是格式错误的,所以报错信息是123
不输入密码 只输入 admin\ 会回显 报错信息变成了从 admin 开始 输入 admin 来测试 不输入密码 回显报错 near admin and password LIMIT 0,1 at line 1 如果输入密码例如123 那么报错信息就变成 near 123 LIMIT 0,1 at line 1 这时错误信息是123 而不是从admin开始到最后 在mysql中 两个连续的单引号表示转义,即 表示一个转义过的 那么前面输入 admin/123 转义变成
select username, password from users where usernameadmin and password123 LIMIT 0,1;
admin and password 被识别为username单引号中的内容 所以出错位置是123 不输入密码 变成 where usernameadmin and password 按照上面应该是admin and password 被识别为字符串内容,那么报错信息应该从最后的单引号开始很明显不是,猜测是因为最后的password 两个连续的单引号也被转义成了一个字面上的单引号,导致最后没有能够匹配最开始的单引号,不能正常闭合整个字符串,所以报错信息是从admin开始的
输入密码之后隔开了两个单引号,不连续所以没被转义,前面正常,只有后面报错