addslashes()函数

发布时间:2023年12月17日

addslashes() 函数是 PHP 中用于在字符串中的特定字符前添加反斜杠 \ 的函数。它通常用于准备字符串,以防止其中的字符被误解为具有特殊含义的字符。这个函数的主要用途是在构建 SQL 查询语句或其他需要转义特殊字符的上下文中,以防范一些安全问题,比如 SQL 注入。

<?php
$a = '"zx'; #对"
$b = "'zx"; #对'
$c = "\zx"; #对\
$d = "\\0zx"; #null(\0在ascii码中为null第一个\用来转义第二个\)
echo addslashes($a),"\n"; 
echo addslashes($b)."\n"; 
echo addslashes($c)."\n"; 
echo $d."\n";
echo addslashes($d)."\n"; 
?>
\"zx     
\'zx
\\zx
\0zx
\\0zx

从上面我们可以知道addslashes()函数对于特定字符“ ‘ \ NULL的处理

以[CISCN2019 总决赛 Day2 Web1]Easyweb举例

这里扫描目录发现*.php.bak在对页面查看源码发现image.php,尝试image.php.bak下载源码

<?php
include "config.php";

$id=isset($_GET["id"])?$_GET["id"]:"1";
$path=isset($_GET["path"])?$_GET["path"]:"";

$id=addslashes($id);
$path=addslashes($path);

$id=str_replace(array("\\0","%00","\\'","'"),"",$id);
$path=str_replace(array("\\0","%00","\\'","'"),"",$path);

$result=mysqli_query($con,"select * from images where id='{$id}' or path='{$path}'");
$row=mysqli_fetch_array($result,MYSQLI_ASSOC);

$path="./" . $row["path"];
header("Content-Type: image/jpeg");
readfile($path);
?>

这里我们发现通过str_replace对\\0 %00 \' ' 替换为空

id的闭合为’

根据上面当id=\\0,传递后为\0通过addslashes()函数变成\\0

我们的值为\\0,但是真正赋值为\0(第一个\为转义符)

addslashes()处理因为这里的id值已经有转义符了所以不会进行处理值为为\\0

str_replace()中表示匹配\0(第一个为转义)

这里会匹配\0替换为空最后的值为\在语句中就是\'转义了'

文章来源:https://blog.csdn.net/qq_61988806/article/details/134986791
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。