我是这类工作的新手,我需要有关保护应用程序免遭攻击的技术或步骤的步骤和信息。
目前,我正在使用Nodejs构建应用程序,我的数据库是MongoDB。
我觉得我的应用程序不够安全,不能在生产中部署。
感谢。
答案 0 :(得分:6)
您可以使用
1.要检查各个npm模块是否存在已知漏洞,Node Security Project提供了nsp工具来检查漏洞:
$ nsp check
2.Synk针对Snyk的开源漏洞数据库检查应用程序是否存在依赖项中的任何已知漏洞。
$ npm install -g snyk
$ cd your-app
$ snyk test
3.为了防止我们的网站被大量请求压倒,我们需要对我们的API进行某种速率限制。
const RateLimit = require('express-rate-limit');
const limiter = new RateLimit({
windowMs: 15*60*1000, // 15 minutes
max: 100, // limit each IP to 100 requests per windowMs
delayMs: 0 // disable delaying — full speed until the max limit is reached
});
//适用于所有请求 app.use(限制器); 4.验证和清理用户数据是使用像validator.js这样的库。
5.可以通过jwt,bcrypt,crypto
完成身份验证6.使用必要的HTTP标头实现头盔保护您的应用程序。默认情况下,头盔可帮助您应用标题。 例如: -
app.use(helmet.hsts({ maxAge:6666666777, includeSubdomains:true }));
通过适当设置HTTP标头,Helmet可以帮助保护您的应用免受一些众所周知的网络漏洞的影响。
Helmet实际上只是九个较小的中间件函数的集合,它们设置了与安全相关的HTTP头:
csp 设置Content-Security-Policy标头,以帮助防止跨站点脚本攻击和其他跨站点注入。
hidePoweredBy 删除X-Powered-By标头。 hpkp添加公钥固定标头以防止伪造的中间人攻击 证书。
hsts 设置Strict-Transport-Security标头,强制实施与服务器的安全(HTTP over SSL / TLS)连接。
ieNoOpen 为IE8 +设置X-Download-Options。
noCache 设置Cache-Control和Pragma标头以禁用客户端缓存。
noSniff 设置X-Content-Type-Options,以防止浏览器从声明的内容类型中嗅探响应。
frameguard设置X-Frame-Options标头以提供点击劫持 保护。
xssFilter 设置X-XSS-Protection以启用跨站点脚本(XSS) 在最近的网络浏览器中过滤。
app.use(helmet.xframe(' allow-from',' http://example.com'));
8.需要适当使用set cookie安全选项
var session = require('cookie-session')
var express = require('express')
var app = express()
var expiryDate = new Date(Date.now() + 60 * 60 * 1000) // 1 hour
app.use(session({
name: 'session',
keys: ['key1', 'key2'],
cookie: {
secure: true,
httpOnly: true,
domain: 'example.com',
path: 'foo/bar',
expires: expiryDate
}
}))
请参考
https://expressjs.com/en/advanced/best-practice-security.html
https://geekflare.com/nodejs-security-scanner/
https://nodesource.com/blog/the-state-of-node-js-security-in-2017
答案 1 :(得分:2)
你可以参考这篇文章。 你可以添加更简单的头盔包。 https://blog.risingstack.com/node-js-security-checklist/