如何防止以正常(纯文本)形式上传文件
Posted
技术标签:
【中文标题】如何防止以正常(纯文本)形式上传文件【英文标题】:How to prevent files uploads in normal (text-only) forms 【发布时间】:2018-06-30 23:30:29 【问题描述】:<!DOCTYPE html>
<html>
<body>
<form action="/submit_page.php" method="post" enctype="multipart/form-data">
Enter your first name and last name below :<br>
First name:
<input type="text" name="fname"><br>
Last name:
<input type="file" name="lname" ><br>
<input type="submit" value="Submit" name="submit">
</form>
</body>
</html>
以上表格仅用于两个输入字段
- 名字 - 姓氏
现在(假设作为黑客)我已将姓氏文本输入字段修改为姓氏文件输入,并添加了enctype="multipart/form-数据” 在表单属性中,然后我点击提交。
它与文件一起发送数据,无论它有多大,服务器仍在临时接收它意味着它也吃掉了我的服务器性能和带宽以及客户端带宽,但表单仅用于文本输入
所以我的问题是如何防止这种黑客攻击?
【问题讨论】:
***.com/questions/4531625/protect-form-hijacking-hack 我认为没有办法防止这种情况发生。只要 action 属性可见,就可以尝试进行表单欺骗。您可以实施的是CSRF
预防。
【参考方案1】:
如果用户只需要上传最大大小为 5 MB 的文件和几个文本字段,则将 POST 内容的总大小限制为 6 MB。
这是另一个描述如何在 PHP 中执行此操作的答案:Change the maximum upload file size
这是 NodeJS 的答案:Node.js: how to limit the HTTP request size and upload file size?
这里解释了为什么这是限制文件上传的唯一方法:
限制上传的大小
不幸的是,HTTP 规范在这里再次受到阻碍。这 在内容之前只有一条有用的信息可用 POST 是 POST 的总大小。这包括所有上传的文件, 表单中的所有其他字段、任何标题等。因此,唯一的 我们可以用来限制上传的是 POST 大小(呃!)。你会 想仔细考虑一个限制 - 它应该足够低 防止拒绝服务攻击,但足够高,让您的用户 上传您想要的文件类型。
来源:Stripes(我非常喜欢的一个 Java 服务器端框架)
【讨论】:
Nodejs 怎么样? @VikasKandari 添加了链接答案 非常感谢它真的很有帮助。【参考方案2】:您无法控制发送或不发送到服务器的内容。这有点自相矛盾。为了知道请求是否有效,服务器需要读取请求,从而强制您接受所有请求。
真的,黑客甚至不需要修改表单。他们可以单独向您的服务器发送请求,而无需访问您的网页。
您可能想研究 Cloudflare 等服务。
【讨论】:
每当我在 form-data 中得到一个文件时,它有什么方法可以终止它 @VikasKandari 为什么你只关心“黑客”上传文件?如果黑客在first name
字段中输入了一个十亿个字母长的名字怎么办? Cloudflare 之类的服务可以保护您免受此类 DDoS 攻击,但除此之外,您无能为力。
这也是同样的问题,这就是为什么我试图找到一个合适的解决方案,因为我的客户(网站所有者)不是百万富翁以上是关于如何防止以正常(纯文本)形式上传文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在SharePoint 当中使用纯JSOM上传任意二进制文件(小于2MB)