我有文件上传脚本如下(upload.php)。我可以猜到,有人可以编写脚本,在很短的时间内将1000多个文件发送到upload.php。
那么,如何保护自己免受众多文件上传攻击?
<?php
if (!empty($_FILES)) {
$ds = DIRECTORY_SEPARATOR;
$storeFolder = 'uploads';
$rand_dir = rand(1, 1000);
$targetPath = realpath(dirname(__FILE__) . '/..') . $ds . $storeFolder . $ds . $rand_dir . $ds;
$targetPath_clean = $storeFolder . $ds . $rand_dir . $ds;
if (!file_exists($targetPath))
mkdir($targetPath, 0777, true);
$filename = date('YmdHis_') . generateRandomString() . '.' . pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
move_uploaded_file($_FILES['file']['tmp_name'], $targetPath . $filename);
echo $targetPath_clean . $filename;
} else {
die('access denied');
}
?>
答案 0 :(得分:1)
这主要取决于你想要达到的目标。
如果表单是匿名的,您可以使用capatcha或限制从一个主机上传文件(例如,在数据库中保存给定的IP并限制其上载更多文件的能力)。如果您的脚本需要用户授权,则可以通过给定登录来限制文件上载。
请提供更多详细信息,了解您的业务逻辑,以便我们为您提供帮助。