上节课回顾,token问题
没有更新token值,造成了复用
加上这段代码就好了,就不会复用了
文件管理-文件上传
upload.html文件,找ai生成就行
uoload.php接受文件上传的信息
这里在写个临时文件存储换个地方
因为上面临时文件存在c盘的目录,换到别的盘要绝对路径,不如就报错
黑名单
如果上传的文件后主在黑名单里面就不让上传
但是这个不安全,例如我上次php3,绕过黑名单了,上传.shtaseess文件,包含png文件,也是成功利用了
白名单
跟黑名单相反一下就行,单安全系数更高
mime类型验证
这个不安全,改一下mime信息就绕过了,不如白名单检测后缀
文件管理-显示
文件显示
这里可以显示了,但是没办法在进一步读取文件夹
加一个超链接,自动把文件夹名字赋值给path
这时候会有任意文件读取的危险,但是php.ini有安全机制,可以防御这种失去
这时候就只能看到www目录,在网上就看不到了
在网上就直接报错看不到了
或者在代码里面过滤../这种关键字
还有设置用户的权限,不给web用户权限看某目录
uoload.php
<?php
$name = $_FILES['file']['name'];
$type = $_FILES['file']['type'];
$size = $_FILES['file']['size'];
$tmp_name = $_FILES['file']['tmp_name'];
$error = $_FILES['file']['error'];
//echo $name."<br>";
//echo $type."<br>";
//echo $size."<br>";
//echo $tmp_name."<br>";
//echo $error."<br>";
//if(move_uploaded_file($tmp_name, 'D:\phpStudy\PHPTutorial\WWW\upload\img/'.$name)){
// echo "上传成功";
//}
//黑名单
/*
$black_ext=array('php','php4','php5','phtml');
$fenge=explode('.',$name);//以逗号分隔获取末尾
$exts=end($fenge);//数组需要用end输出
if(in_array($exts,$black_ext)){
echo '非法文件'.$exts;
}else{
if(move_uploaded_file($tmp_name, 'D:\phpStudy\PHPTutorial\WWW\upload\img/'.$name)){
echo "上传成功";
}
}
*/
//白名单
$allow_ext=array('png','jpg','jpeg','gif');
$fenge=explode('.',$name);//以逗号分隔获取末尾
$exts=end($fenge);//数组需要用end输出
if(in_array($exts,$allow_ext)){
if(move_uploaded_file($tmp_name, 'D:\phpStudy\PHPTutorial\WWW\upload\img/'.$name)){
echo "上传成功";
}
}else{
echo '非法文件'.$exts;
}
file-manage.php
<?php
$dir=$_GET['path'] ?? './';
function show_file($dir){
if(@$d=opendir($dir)){//打开目录,返回句柄
echo $d;
while(($file=readdir($d))!==false){//readdir读取句柄中的文件和子目录
if(is_dir($file)){//is_dir检测是否是目录
echo '文件夹'."<a href='?path=$file'>$file</a>".'<br>';
}else{
echo '文件'.$file.'<br>';
}
}
}
}
show_file($dir);
jian
kang
ping
an