我有一个webapp(MVC 4),它的目的是对文件进行操作,它的工作方式是:
用户上传文件 - >该网站对文件进行操作 - >用户再次下载文件(文件的新版本)。
所以我需要在我的网站上接受一个大文件大小,所以我做了什么:
<system.web>
<customErrors mode="Off"/>
<compilation debug="true"/>
<authentication mode="None" />
<!--<compilation debug="true" targetFramework="4.5" />-->
<httpRuntime targetFramework="4.5" maxRequestLength="2097151" executionTimeout="3600"/>
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="4294967295"/>
</requestFiltering>
</security>
如您所见,我放大了“maxAllowedContectLength”和“maxRequestLength”和“executionTimeout”值。
我的问题:
我的操作是否会在我网站的安全性方面造成漏洞?
如果确实如此,为什么?还有更好的方法吗?我该怎么做才能最大限度地减少威胁?
答案 0 :(得分:1)
它不会创建安全漏洞,但它确实使攻击者更容易在服务器充斥的情况下充斥您的服务器。如果将maxAllowedRequest
/ ContentLength
设置为较小的值,则攻击者必须发出更多请求才能充斥服务器,服务器可能更容易检测/拒绝/处理这些较小的请求
ExecutionTimeout
很高会占用资源,否则这些资源可用于为您网站上的其他用户提供服务。
有更好的方法吗?是的,使用外部服务上传大文件。 Google Drive / Dropbox /等。将重处理卸载到专用服务。如果您想自己处理此问题而不是卸载到第三方,请考虑使用像Amazon / Azure这样的云服务。诀窍是将其移出主Web应用程序。
答案 1 :(得分:1)
此阈值用于保护您的网站免受DOS攻击(拒绝服务攻击) - 即想象一些合理数量的黑客向您的网站发送大量(大小)请求 - 您的常规用户将无法使用它。在ASP.NET的条款中,仅将慷慨的阈值限制为实际执行繁重工作的页面。
<location path="UploadFile.aspx">
<system.web>
...
</system.web>
</location>
总的来说,考虑一些云服务为你做繁重的工作(正如RGraham建议的那样)。