PHP 文件上传

#0x01创建文件上传表单:

<html>
<body>

<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">Filename: </label>
<input type="file" name="file" id="file" /><br />
<input type="submit" name="submit" value="submit">
</form>

</body>
</html>

 

#0x02创建文件上传脚本:

<?php

    /*
     * 
     * $_FILES['file']['name'] - 被上传文件的名称
     * $_FILES['file']['type'] - 被上传的类型
     * $_FILES['file']['size'] - 上传文件的大小,以字节计
     * $_FILES['file']['tmp_name'] - 存储在服务器的文件的临时副本的名称
     * $_FILES['file']['error'] - 由文件上传导致的错误代码
     * 
     * */



    if ($_FILES['file']['error'] > 0) {
        echo 'Error: ' . $_FILES['file']['error'] . '<br />';
    } else {
        echo 'upload: ' . $_FILES['file']['name'] . '<br />';
        echo 'Type: ' . $_FILES['file']['type'] . '<br />';
        echo 'Size: ' . $_FILES['file']['size'] . '<br />';
        echo 'Stored in: ' . $_FILES['file']['tmp_name'] . '<br />';
    }

 

回显:

 

#0x3  上传限制

w3school针对文件的限制,存在问题,只是做了简单的数据类型校验。

<?php

    //增加对文件上传的限制,用户只能上传.gif或.jpeg文件, 文件大小必须小于20kb;
    
    if ((($_FILES['file']['type'] == 'image/gif')
        || ($_FILES['file']['type'] == 'image/jpeg')
        || ($_FILES['file']['type'] == 'image/pjpeg')
        && ($_FILES['file']['size'] < 20000))) {
            if ($_FILES['file']['error'] > 0) {
                echo 'Error' . $_FILES['file']['error'] . '<br />';
            } else {
                echo 'Upload: ' . $_FILES['file']['name'] . '<br />';
                echo 'Type: ' . $_FILES['file']['type'] . '<br />';
                echo 'Size: ' . $_FILES['file']['size'] . '<br />';
                echo 'Stored in: ' . $_FILES['file']['tmp_name'];
            }
        } else {
            echo 'Invalid file';
        }

#0x04 保存文件:

<?php

    //增加对文件上传的限制,用户只能上传.gif或.jpeg文件, 文件大小必须小于20kb;
    
    if ((($_FILES['file']['type'] == 'image/gif')
        || ($_FILES['file']['type'] == 'image/jpeg')
        || ($_FILES['file']['type'] == 'image/pjpeg')
        && ($_FILES['file']['size'] < 20000))) {
            if ($_FILES['file']['error'] > 0) {
                echo 'Return Code: ' . $_FILES['file']['error'] . '<br />';
            } else {
                echo 'Upload: ' . $_FILES['file']['name'] . '<br />';
                echo 'Type: ' . $_FILES['file']['type'] . '<br />';
                echo 'Size: ' .($_FILES['file']['size'] / 1024) . 'kb <br />';
                echo 'Temp file: ' . $_FILES['file']['tmp_name'] . '<br />';
                
                if (file_exists('upload/' . $_FILES['file']['name'])) {
                    echo $_FILES['file']['name'] . ' already exists.';
                } else {
                    move_uploaded_file($_FILES['file']['tmp_name'], 'upload/' . $_FILES['file']['name']);
                    echo 'Stored in: ' . 'upload/' . $_FILES['file']['name'];
                }
            }
        } else {
            echo 'Invalid file';
        }

#0x05 文件上传漏洞

Content-Type 只校验了文件类型

 

通过相关资料学习和总结PHP相关上传的一些收集:

①【.php 不输入文件名】

②【x.php. a.phpx x.phtml x.php; x.php~】

③【php后缀+空格】

posted @ 2018-06-13 15:34  瘦子的伤悲  阅读(97)  评论(0编辑  收藏  举报