DVWA代码审计之file upload mediu级别 php语言代码详解

文章详细介绍了PHP中的isset()函数用于检查变量是否设置,basename()函数用于获取路径中的文件名,以及move_uploaded_file()函数处理文件上传,包括验证和移动文件到目标位置的过程。示例代码展示了如何在文件上传场景中使用这些函数。
摘要由CSDN通过智能技术生成

目录

涉及函数:

代码详解: 


涉及函数:

isset()用于判断一个变量是否被设置且值不为 null。

bool isset ( mixed $var [, mixed $... ] )

其中,$var 是要检测的变量,可以是一个变量名、一个数组元素或一个对象属性,支持一次检测多个变量。如果检测的变量存在且值不为 null,返回 true;否则返回 false。使用 isset() 函数可以进行变量是否设置的判断,确保程序在使用变量前已经对其进行了初始化。

需要注意的是,在变量值为 false0 和空字符串等情况下,isset() 函数也会返回 false。因此,在进行严格的判断时,应该使用 === 运算符来判断变量的类型和值。

basename()函数:用于返回指定路径字符串中的文件名部分。它类似于 dirname() 函数,但与 dirname() 函数返回指定路径的目录部分不同,basename() 函数返回指定路径字符串中的文件名部分。

该函数接受一个必需的字符串参数 $path,它表示要获取文件名的路径。

$path = "/path/to/example.php";
$filename = basename($path);

echo $filename; // 输出 example.php

在这个例子中将路径字符串 "/path/to/example.php" 分配给 $path 变量。然后使用 basename() 函数获取了 $path 变量中的文件名,并将结果存储在 $filename 变量中。最后通过 echo 命令输出了 $filename 变量的值。

如果使用的是 Windows 操作系统则需要注意,在 Windows 中,路径分隔符是反斜杠(\),而不是像在 Unix 系统中一样使用正斜杠(/)。因此,在 Windows 中使用 basename() 函数时,需要使用正斜杠或双反斜杠(\)作为分隔符。例如:

$path = "C:\\path\\to\\example.php"; // 双反斜杠作为路径分隔符
$filename = basename($path);

echo $filename; // 输出 example.php

或者:

$path = "C:/path/to/example.php"; // 正斜杠作为路径分隔符
$filename = basename($path);

echo $filename; // 输出 example.php

move_uploaded_file() 函数: 用于将上传的文件从临时目录移动到指定目录的函数。使用该函数,可以将上传的文件存储到指定的目录中并更改其名称。

bool move_uploaded_file ( string $filename , string $destination )

其中,$filename 是上传的文件路径,是 $_FILES 数组中对应文件的 tmp_name 值;$destination 是要将文件移动到的目标路径,可以是绝对路径或是相对目录。如果移动成功,返回 true;否则返回 false

需要注意的是,由于安全原因,文件上传时需要进行一些验证和过滤。在处理上传文件时,最好使用 is_uploaded_file() 函数对其进行验证,同时,还应该对文件类型、文件大小等进行限制,以防止服务器受到攻击或遭受恶意代码注入。

代码详解: 

<?php 

if( isset( $_POST[ 'Upload' ] ) ) { 
    // 上传文件的路径
    $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/"; 
    $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] ); //函数basename()返回路径中的文件名部分,$_FILES为一个二维数组存储文件初始名称。  		$_FILES['file']['name']:表示上传文件的原始名称。$_FILES['file']['type']:表示上传文件的类型。$_FILES['file']['size']:表示上传文件的大小。$_FILES['file']['tmp_name']:服务器端缓存上传文件的临时文件名。$_FILES['file']['error']:表示上传文件时出现的错误码。

    // 文件的名字,类型,大小
    $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ]; 
    $uploaded_type = $_FILES[ 'uploaded' ][ 'type' ]; 
    $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ]; 

    //  判断上传文件类型是否为图像,大小是否超过100000
    if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) && 
        ( $uploaded_size < 100000 ) ) { 

        // 判断是否能将文件移动到上传文件夹中
        if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) { 
            // No 
            echo '<pre>Your image was not uploaded.</pre>'; 
        } 
        else { 
            // Yes! 
            echo "<pre>{$target_path} succesfully uploaded!</pre>"; 
        } 
    } 
    else { 
        // 上述情况都不是即为无效文件
        echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>'; 
    } 
} 

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值