如何防止以普通(纯文本)形式上传文件

时间:2018-01-22 10:49:01

标签: php html asp.net node.js multipartform-data



<!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>
&#13;
&#13;
&#13;

上面的表格仅适用于两个输入字段

- 名字
  - 姓氏

现在(假设是黑客)我已将姓氏文本输入字段修改为姓氏文件输入,并添加了 enctype =&#34; multipart表单属性中的/ form-data&#34; ,我点击提交。

它与文件一起发送数据无关紧要,服务器仍然在临时接收它意味着它正在吃我的服务器性能和带宽以及客户端带宽但是表单只是为文本输入设计

所以我的问题是如何防止这种黑客攻击?

2 个答案:

答案 0 :(得分: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大小(呃!)。你&#39; 11   我想仔细考虑一个限制 - 它应该足够低   防止拒绝服务攻击,但足以让你的用户   上传您想要的文件种类。

来源:Stripes(我非常喜欢的Java服务器端框架)

答案 1 :(得分:0)

您无法控制向服务器发送或未发送的内容。这有点悖论。为了知道请求是否有效,服务器需要读取请求,因此排序强制您接受所有请求。

真的,黑客甚至不需要修改表格。他们可以独立地向您的服务器发送请求,而无需访问您的网页。

您可能希望查看Cloudflare等服务。