JSRC 安全课堂第116号,邀请l0ca1作为讲师,为每个人分享Nodejs的安全性。 京安小妹:常见的nodejs Web框架是什么? l0ca1: 流行的nodejs web框架现在有eporess,koa。 Koa也是由快车队建造的。快速框架带有更完整的中间件。 koa2支持async/await,它解决了epxress中回调嵌套的问题。 Koa本身并没有带来任何中间件。许多中间件需要独立存在。实施或使用某些第三方软件包。我目前正在开发基本上由Web平台使用的koa框架。
京安小妹 :它有多安全?
l0ca1: 它们本身只是最基本的Web框架,并且没有任何安全性。但是从这两个框架派生的节点js框架,例如thinkjs,egg等,提供了一组具有内置安全处理的Web框架结构。例如,egg本身提供安全插件egg-security以确保项目的默认安全性,例如xss过滤,csrf防御,ssrf防御等.Thinkjs提供了一个逻辑层来过滤接收到的数据,并封装了各种各样的数据库处理,无需手动拼接sql语句,以确保数据库查询的安全性。这些框架的文档中提到了安全规范,通常是根据文档规范编写的,这避免了许多安全问题。对于我自己构建的Web框架,安全处理主要使用中间件来处理。还有几个nodejs Web框架社区可以保持高水平的活动,并且可以及时修复和解决许多问题。
京安小妹:常见的nodejs安全漏洞是什么? l0ca1: 我们的一些常见Web漏洞可能出现在nodejs项目中。如sql注入,xss,命令执行,csrf 等可能会出现。 当我查看这样的项目时,他使用文档规范在大多数地方调用sql查询,但是在处理稍微复杂的地方,sql拼接稍微复杂一点,使用手动拼接,并且缝合过程中未处理数据。导致注射。 Const res=await this.model('mysql')。query(`SELECT * FROM __SEARCH__ WHERE $ {sql} order by search_id DESC LIMIT $ {(currentPage - 1)* numsPerPage},$ {numsPerPage}`); 如果接受不安全的输入,请调用child_process.spawn拼接语句以执行系统命令。 如:https://github.com/facebook/create-react-app/pull/4866/commits/4165185c3ad44ea80c6e35a8e4e4857a31327bdd
其中一些将出现在您自己编写的代码中,其中一些可能是引用的第三方库的问题。如果第三方库存在安全问题,我们及时编写的代码没有问题,也可能导致利用漏洞。 和 ReDos 也是 nodejs web 中的常见漏洞,这在其他语言中并不常见。
京安小妹:我们如何在nodejs开发中检测到这些漏洞? l0ca1: 我们可以使用eslint中的一些插件,例如eslint-plugin-security,它包含许多检测规则,可以提前检测我们项目中可能存在的安全问题。 https://www.npmjs.com/package/eslint-plugin-security 我们可以简单地看看他的规则来完善这些规则并编写更多的安全检测规则。
https://www.npmjs.com/package/eslint-plugin-security 使用一些工具和平台来检查我们的 node_modules 依赖项的安全性,例如 https://app.snyk.io 或 nsp 更多信息取决于我们在开发过程中的安全审核和安全规范。
京安小妹: 那么我们应该如何避免呢?
l0ca1: 常见处理包括添加用于安全保护的http头,例如X-XSS-Protection,Content-Security-Policy,x-content-type-options等,它们可以通过中间件处理对网站请求的响应。 例如,在框架请求处对用户输入进行预处理和处理。例如,当使用koa时,在bodyparser中处理各种类型的数据,并且json数据的处理阻止了nosql注入。例如,逻辑层预处理thinkjs框架中的数据。 还有许多其他方面,例如会话的默认配置,沙箱的使用,常规的使用以及并发请求的处理。 使用框架进行开发时,需要更加注重框架的更新,了解框架的安全处理,并尝试根据框架文档的规范进行开发,以确保我们的基本安全性。项目。
京安小妹: 如何学习nodejs的安全性?
L0ca1: 我们可以更加关注npm官方安全平台平台https://www.npmjs.com/advisories,他将公开,他将公布漏洞类型和某些依赖版本。 专注于节点的错误更新,其中涉及二进制安全性和内置模块的一些安全更新。 注意节点本身的基础库的github问题,如http库,tls库,缓存库等。 爱上代码,写更多代码,哈哈哈。