如果我使用nodejs的http模块制作一个简单的http服务器,我需要做多少验证/检查?
模块是否会处理安全问题,例如格式错误的请求和带有恶意标头值的请求?模块是否确保一切都遵循http规范,或者我是否必须进行大量检查以确保我的服务器不容易崩溃?
编辑:假设nodejs没有做任何真正的验证,我很确定是这样的。我需要做些什么来确保我的服务器不易被破坏?
答案 0 :(得分:1)
什么是恶意标头值?节点是低级别的,因此很多东西都没有被检查。但你必须看看那些东西。但它不像有人可以发送“执行0xFA894224”或其他东西。可能存在的唯一漏洞就是允许格式错误的请求(例如,您可能会获得request.location: "\*\*\* CHINAAA \*\*\*"
,忘记启动套接字关闭事件,或者抛出JavaScript错误并正常终止。
你可以随时检查自己是否有这些东西,或者使用try catch块,process.on等。当然,并不是说可能没有缓冲区溢出或某些地方,但是不太可能考虑节点是建立在v8之上,许多库都是纯JavaScript
编辑: 如何阻止随机崩溃:
process.on('uncaughtException',function() {
/* ignore error */
});
答案 1 :(得分:-1)
NodeJS并未被用作面向世界的HTTP服务器。但是,它的HTTP功能可用于将请求代理到适当的Web服务器。
偏离主题,但Nginx非常擅长这样做,因为它拥有稳定的线程数。