• 技术文章 >后端开发 >php教程

    PHP漏洞全解(九)-文件上传漏洞

    黄舟黄舟2016-12-22 09:47:54原创935
    转载请注明来源:PHP漏洞全解(九)-文件上传漏洞

    一套web应用程序,一般都会提供文件上传的功能,方便来访者上传一些文件。

    下面是一个简单的文件上传表单


    <form action="upload.php" method="post" enctype="multipart/form-data" name="form1">

    <input type="file" name="file1" /><br />

    <input type="submit" value="上传文件" />

    <input type="hidden" name="MAX_FILE_SIZE" value="1024" />

    form>


    php的配置文件php.ini,其中选项upload_max_filesize指定允许上传的文件大小,默认是2M

    $_FILES数组变量

    PHP使用变量$_FILES来上传文件,$_FILES是一个数组。如果上传test.txt,那么$_FILES数组的内容为:




    $FILES
    Array
    {
    [file] => Array
    {
    [name] => test.txt //文件名称
    [type] => text/plain //MIME类型
    [tmp_name] => /tmp/php5D.tmp //临时文件
    [error] => 0 //错误信息
    [size] => 536 //文件大小,单位字节
    }
    }
    如果上传文件按钮的name属性值为file

    <input type="file" name="file" />

    那么使用$_FILES['file']['name']来获得客户端上传文件名称,不包含路径。使用$_FILES['file']['tmp_name']来获得服务端保存上传文件的临时文件路径

    存放上传文件的文件夹

    PHP不会直接将上传文件放到网站根目录中,而是保存为一个临时文件,名称就是$_FILES['file']['tmp_name']的值,开发者必须把这个临时文件复制到存放的网站文件夹中。

    $_FILES['file']['tmp_name']的值是由PHP设置的,与文件原始名称不一样,开发者必须使用$_FILES['file']['name']来取得上传文件的原始名称。

    上传文件时的错误信息

    $_FILES['file']['error']变量用来保存上传文件时的错误信息,它的值如下:

    错误信息数值说 明
    UPLOAD_ERR_OK0没有错误
    UPLOAD_ERR_INI_SIZE1上传文件的大小超过php.ini的设置
    UPLOAD_ERR_FROM_SIZE2上传文件的大小超过HTML表单中MAX_FILE_SIZE的值
    UPLOAD_ERR_PARTIAL3只上传部分的文件
    UPLOAD_ERR_NO_FILE4没有文件上传

    文件上传漏洞

    如果提供给网站访问者上传图片的功能,那必须小心访问者上传的实际可能不是图片,而是可以指定的PHP程序。如果存放图片的目录是一个开放的文件夹,则入侵者就可以远程执行上传的PHP文件来进行攻击。

    下面是一个简单的文件上传例子:




    php
    // 设置上传文件的目录
    $uploaddir = "D:/www/images/";
    // 检查file是否存在
    if (isset($_FILES['file1']))
    {
    // 要放在网站目录中的完整路径,包含文件名
    $uploadfile = $uploaddir . $_FILES['file1']['name'];
    // 将服务器存放的路径,移动到真实文件名
    move_uploaded_file($_FILES['file1']['tmp_name'], $uploadfile);
    }
    ?>
    ……
    <form method="post" enctype="multipart/form-data" name="form1">
    <input type="file" name="file1" /><br />
    <input type="submit" value="上传文件" />
    <input type="hidden" name="MAX_FILE_SIZE" value="1024" />
    form>


    这个例子没有检验文件后缀,可以上传任意文件,很明显的上传漏洞

    以上就是PHP漏洞全解(九)-文件上传漏洞的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!


    php入门到就业线上直播课:查看学习

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    上一篇:PHP漏洞全解(八)-HTTP响应拆分 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 总结ElasticSearch基本操作!非常详细!• PHP网页UTF8编码开发中空白的问题_PHP教程• PHP经常容易记乱的知识_PHP教程• php+ajax文章自动保存代码实例方法_PHP教程• 50条规则提高PHP开发提高效率技巧_PHP教程
    1/1

    PHP中文网