Node Js Express默认限制

时间:2017-11-30 14:56:50

标签: node.js express

读取节点js doc。它们似乎在http主体大小和参数数量的默认限制值中是保守的:

https://github.com/expressjs/body-parser#parameterlimit

我发现你可以扩展它,这似乎是一个经证实的解决方案:

var bodyParser = require(' body-parser');

app.use(bodyParser.urlencoded({     parameterLimit:100000,     限制:' 50mb',     延伸:真实   }));

然而,仍有两个问题:

  1. 为什么默认值如此保守?
  2. 为什么将限制扩展到50mb是一个好主意?
  3. 我知道答案取决于应用该解决方案的应用程序,但我希望有一个更通用的方法导向的答案来更好地理解问题。

2 个答案:

答案 0 :(得分:1)

答案似乎是HTTP有效负载的编码。

Express.js文档(http://expressjs.com/uk/api.html#req.body)说bodyParser.urlencoded解析x-www-form-urlencoded数据。

MDN(https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST)基本上说x-www-form-urlencoded数据是键/值对(我在这里读取的行)不适合大量的数据传输(使用multipart / form-data encoding发送大量数据):

  

x-www-form-urlencoded:值以'&'分隔的键值元组编码,键和值之间带'='。非字母数字字符是百分比编码的:这就是为什么这种类型不适合与二进制数据一起使用的原因(而是使用multipart / form-data)

bodyParser似乎将数据限制为一种安全措施,以帮助我们避免输入传输错误/问题。至少,这就是我读它的方式。

答案 1 :(得分:1)

我很难想到一个合法的用例,其中API需要在单个请求中接受超过100个参数。查看Open Web应用程序安全项目(OWASP)指南(CHEATSHEET HERE),ExpressJS设置的默认限制值似乎是对齐且负责的。我不会改变它们。

如果您认为这些限制可能会阻碍您提供所需的功能,我会强烈考虑重新考虑您的策略,因为这可能会让您面临不必要的安全漏洞。例如,您可以制作多个较小的请求等。