1. 示例代码
搭建环境:PHP(8.1.19)+Nginx(1.24.0)
<?php
define('UPLOAD_FOLDER',
sys_get_temp_dir().DIRECTORY_SEPARATOR.'uploads'.DIRECTORY_SEPARATOR);
function validateFilePath($fpath) {
if (str_contains($fpath, '..' . DIRECTORY_SEPARATOR)) {
http_response_code(403);
die('invalid path!');
}
}
function uploadFile($src, $dest) {
$path = dirname($dest);
if (!file_exists($path)) {
mkdir($path, 0755, true);
}
if (move_uploaded_file($src, $dest)){
echo "上传成功";
} else {
echo "上传失败";
}
}
function normalizeFilePath($fpath) {
if (strpos($_SERVER['HTTP_USER_AGENT'], 'Windows')) {
return str_replace('\\', '/', $fpath);
}
return $fpath;
}

文章描述了一个PHP和Nginx环境下,由于文件路径处理不当导致的上传路径遍历漏洞。通过示例和复现,展示了如何利用不安全的`str_contains`和用户代理判断绕过验证。作者提出了改进验证、不依赖用户代理、限制上传目录和安全处理文件名的修复建议。

7657

被折叠的 条评论
为什么被折叠?



