nodejs后端
如您所知,如今对于所有类型的初创公司来说,安全性都变得越来越重要。 作为启动所有者,首先应注意Web应用程序的安全性。 请记住,用户信任您的信息,因此您应该专业地关心他们的数据,否则,如果有人黑客您的Web应用程序并窃取了数据,您将失败并失去客户。
建立一个Saas业务或众包平台都没关系。
您收集什么样的数据都没有关系。
您必须关心平台的安全性。 我们将在本教程中介绍后端安全性。 我们将使用带有Express的Node.js来支持我们的API。
1.注射
最受欢迎的攻击之一是SQL注入。 SQL注入是一种代码注入技术,可能会破坏数据库。 黑客可以提交这些摘要中的任何一个,并使您的数据库崩溃。
' ;DROP TABLE customers; --
此行将删除您的客户的完整表格。
'OR 1 = 1 --
该行可以通过密码字段提交,并可以访问用户数据。
那么如何克服Node.js中SQL注入攻击呢?
建议在后端使用ORM来处理数据库,例如Knex.js。 但是,请记住,SQL注入并不是黑客可以使用的唯一注入类型。 注入意味着通过以网站的形式提交那些不好的代码行来将外部代码与您的代码混合在一起。 克服任何注入攻击的最佳方法是执行以下步骤。
- 验证数据库中的每个字段
- 在Node.js控制器中使用Express Validator来验证每个提交的字段
- 在允许用户将数据发送到后端之前,请验证前端中的每个表单。 使用Angular,React或Vue.js都没关系。 他们为此提供了一个奇妙且经过充分解释的解决方案。
2.仔细检查第三方库
请记住,所有第三方库都是开源的,并由其他开发人员上载。 如果有人创建该程序包具有漏洞以供日后伤害,该怎么办? 建议检查每个程序包中的可用漏洞。 我们使用了一个名为NSP的软件包,但NPM在2018年收购了它,因此现在它已成为NPM的一部分。 您也可以使用Snyk 。
跑
npminstall -g snyk
安装后,您需要使用您的Snyk帐户进行身份验证,然后进行测试。
您可能还会注意到,在安装npm软件包时,它会告诉您有关漏洞的信息。 不要忽略它! 赶紧跑
npm audit fix
这将解决大多数问题。
3.记录
记录是跟踪您的网站访问者以查看他们采取的措施和采取的措施的机会。 访问者如何与您的网站互动? 它还提供有关每个访客的其他详细信息。 换句话说,如果某人试图在您的网站上做一件奇怪的事情,您可以通过查看日志来获取有关该人的更多信息。
对我们来说幸运的是,有2个出色的软件包可以非常轻松地帮助解决Node.js中的此问题。 您可以使用Winston或Morgan 。 我更喜欢Morgan,并在以前的项目中多次使用它。 让我们看看它是如何工作的?
首先,我们需要安装它:
npminstall morgan
它只是一个中间件,我们需要在index.js中包括以下内容:
app.use(morgan('combined' ));
还有其他一些选项也可以很好地工作,但是组合的选项为您提供了很多信息。
4.保持环境变量的安全
您可能会使用Sendgrid之类的电子邮件服务,也可能会使用Stripe或Paypal接受付款。 您可以使用Twillio进行SMS验证。 对于每个这样的服务提供商,您使用的API密钥必须保存在安全的地方。 最佳做法是将所有这些API密钥值保存在一个名为.env的单独文件中。 您可以将这些值分配给变量,然后可以在所需的控制器功能中使用。 我将建议使用dotenv库。 让我们安装它:
npminstall dotenv
然后,当您使用.env文件中的环境变量时,假定它的名称为stripe_key,那么您只需要在控制器内部使用它,如下所示:
process.env.stripe_key
而已。
还有一点要注意 :如果您要将该代码公开地推送到Github中,并且还要在文档中写出运行项目所需的API以便其他用户可以创建帐户, 请不要忘记在.gitignore中包含.env文件。在那些平台上并获得自己的密钥。
5.设置安全头
具有安全的标头也非常重要。 它可以帮助您保护API免受XSS攻击。 这是头盔寻求帮助的地方。 这是您应该安装并包含在项目的index.js中的另一种中间件。
6.为您的API设置访问控制
控制API的访问权限非常重要,否则任何人都可以访问它并做任何他们想做的事情。 这就是为什么您需要使用Cors库来保护您的API的原因。 下面是它的工作原理:
作为中间件,您应该在index.js中进行配置。 它看起来像这样:
const whitelist = [ 'http://example1.com' , 'http://example2.com' ]
const corsOptions = {
origin : function ( origin, callback ) {
if (whitelist.indexOf(origin) !== -1 ) {
callback( null , true )
} else {
callback( new Error ( 'Not allowed by CORS' ))
}
}
}
app.use(cors(corsOptions));
如您所见,您可以存储您授予权限的域名。 您可以查看官方文档以了解其完整实施。
7.数据库管理
另一个重要的事情是对数据库中的密码进行哈希处理,因此没有人可以获取所存储密码的真实值。 当然,可能还需要散列另一个字段,但是最常见的字段是密码字段。
最受欢迎的库是这两个库:
- 加密货币
- BCrypt
8.认证管理
身份验证管理是确保站点安全的最重要因素之一。 它可以帮助您管理用户的季节并了解可以访问哪些数据和页面类型? 如今,最受欢迎的解决方案是使用JWT(JSON Web令牌) 。 由于它是一个大而不同的主题,因此在本教程中我们将不涉及其集成,但是可以在Internet上找到许多有关JWT实现的教程。
9.使用HHTPS
如今,SSL证书已成为运行在线业务的非常流行且必不可少的东西。 有很多出售这些证书的证书颁发机构,但是您可以使用2个免费选项:
Cloudflare众所周知是CDN,但它也可以将您的站点转换为HTTPS并保护其免受DDoS攻击。
结论
确保您网站的安全是一个常规过程,您应该定期关心它,以发现新的漏洞并加以修复。
翻译自: https://hackernoon.com/how-to-make-your-nodejs-back-end-secure-leh32ty
nodejs后端