防止跨站点文件上传到我的服务器上


Prevent cross site file uploads onto my server?

有办法从其他网站将FILE上传到我的网站吗?

我有一个表单,它采用半大型视频文件,并在客户端和服务器端提交表单后使用令牌进行身份验证。然而,由于我们可能有300人同时上传文件,我们不希望一些跨站点的黑客试图上传无论如何都无法通过的文件。

他们尝试的问题是,当文件开始上传时,它会占用我们的内存资源(对吧?)和带宽。

我正在寻找的解决方案是使用apache或iptables或文件发送到的php脚本,一旦发现文件不是来自网站的上传页面,就不允许上传。

这可能吗?

解决方案将使用表单令牌来确保表单仅通过服务器提交。为此,创建一个具有随机值的表单令牌,将其放入会话以及隐藏的表单字段中。发布表单时,请对照会话检查此隐藏字段的值。如果表单令牌存在并且与会话匹配,则允许上传,否则不允许。

您的上传表单页面

PHP代码:

$token = md5 (uniqid (rand (), true));
$_SESSION[“token”] = $token;

HTML代码:

<form> 
 <input type="file" />
<input type=”hidden” name=”token” value=”<?php echo $token;?>”>
</form>

您的提交页面每次用户请求您的上传页面上传新文件时,$_SESSION["token"]都会被覆盖。所以你不必担心它的值被重置。