如何阻止上传的文件?

时间:2016-03-12 22:05:00

标签: php html file-upload

基于这两个问题:

我写了一个简单的密码保护文件上传器。

所以我有一个名为 password.php

的密码验证程序
    <body>
        <?php
            $pass = $_POST['pass'];
            {?>
                <form method="POST" action="password.php">
                    Password <input type="password" name="pass"></input>
                    <input type="submit" name="submit" value="Ok"></input>
                </form>
            <?}
                if($pass == "admin")
                    {
                    include("../uploader.html");
                    }
        ?>
    </body>

从代码中可以看出。如果传递正常,则包含 public_html 文件夹中的 uploader.html

    <body>
        <form enctype="multipart/form-data" action="upload.php" method="POST">
            <input name="thefile" type="file" /><br>
            <input type="submit" value="Send" />
        </form>
    </body>

最后我们使用upload.php发送&#34;文件&#34;到名为文件的文件夹。

    <body>
        <?php
            $thefile_tmp = $_FILES['thefile']['tmp_name'];
            $thefile_name = $_FILES['thefile']['name'];
            if(is_uploaded_file($thefile_tmp)) 
                {
                move_uploaded_file($thefile_tmp, "files/$thefile_name");
                }
        ?>
    </body>

我将文件文件夹的chmod更改为777,一切正常。

我给了一堆学生密码,我让他们给我发报告。学生现在可以匿名上传恶意文件(例如 loop.php )并在浏览器中打开 ... / files / loop.php

所以我想保护我的网站免受这些故事的影响。我尝试将文件文件夹的chmod设置为773或776.在776上,我的代码失去了发送文件的能力。在773,你仍然可以打开 files 文件夹中的内容。

  

问题/请求是否有一种简单的方法可以阻止打开上传的文件?

我使用的简易解决方案

基于@Fred -ii-建议我添加到 upload.php 扩展程序验证程序。现在看起来像这样

<body>
    <?php
        $thefile_tmp = $_FILES['thefile']['tmp_name'];
        $thefile_name = $_FILES['thefile']['name'];
        $thefile_ext = pathinfo($thefile_name, PATHINFO_EXTENSION);
        if(is_uploaded_file($thefile_tmp))
            {
            if( $thefile_ext == 'zip')
                {
                move_uploaded_file($thefile_tmp, "files/$thefile_name");
                }
            }
    ?>
</body>

替代解决方案

as @ alexander.polomodov answeres。我只是将.htaccess文件放在文件文件夹中,仍然可以发送文件,但没有人可以访问它。这种方法不适合我,因为我希望学生能够窥视彼此的报告。

1 个答案:

答案 0 :(得分:1)

你使用什么网络服务器?

1)如果您使用Apache,请遵循此answer

使用字符串添加文件文件/ .htaccess:

Deny from all

2)如果你使用Nginx,请按照answer

进行操作

添加到您的nginx配置:

location /files {
    deny all;
    return 404;
}