基于这两个问题:
我写了一个简单的密码保护文件上传器。
所以我有一个名为 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文件放在文件文件夹中,仍然可以发送文件,但没有人可以访问它。这种方法不适合我,因为我希望学生能够窥视彼此的报告。