nicenote/source/_posts/nodeJS性能处理一.md
2018-07-13 16:54:43 +08:00

86 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: nodeJS性能处理
date: 2018-04-25 09:56:24
tags: [性能优化]
categories: nodeJS
---
# 介绍
目前市面上有很多后台纯 node 的项目,但是用 node 做后端还是有一系列的问题比如稳定性安全性抛开这两块还要优化性能如何提高用户的访问速度在网络不佳2G的情况下如何能正常访问项目都是一系列需要考虑的问题。本章内容针对安全性给出相关技巧。
## 1. 不要用 Eval
eval 的作用是将用户输入的字符串转化为可执行的代码,类似欺骗的效果,这样的坏处是会受到 XSS 攻击。
## 2. 使用 strict 模式
严格模式下的变量声明会抛出一些隐藏的错误。
```js
'use strict'
var obj = {
a: '1',
a: '2'
}
// 抛出错误 syntax error
```
## 3. 使用 Eslint 测试代码规范
可以使我们早期捕获一些 bug并及时修正。
## 4. 全面测试
测试很重要,不但单元要测试,还要全面测试,例如用 mocha 测试代码覆盖率。
## 5. Unix 下不要直接使用 sudo node app.js
这样如果产生错误,会让整个系统宕机,可以使用 nginx 反向代理。
## 6. 避免 shell command 注入
```-t
child_process.exec('ls', function (err, data) {
console.log(data);
});
```
上面的 child_process.exec 调用的是 /bin/sh ,也就是执行了一个解释器。
> 为了避免这个问题我们可以使用child_process.execFile。
## 7. 临时文件
创建文件时,处理上传的文件要注意,这些文件可能会吃掉你的磁盘所有空间。
> 使用 Streams。
## 8. 加密 Web 应用
用 https 代替 http请求的过程可以添加签名头。
## 9. Reflected Cross Site Scripting
也就是跨站脚本攻击,就是但用户发送一段数据,如果在未做任何处理的情况下直接插入 DOM这可能会出现安全问题例如
```js
//用户输入的数据中带脚本,如果不做处理,会被执行。
Im human <script>alert('Im hacker')<script>
```
> 处理方式1. 对插入的数据进行验证,除去 HTML。
## 10. 看好你的 cookie
默认情况下cookie 可以通过 js 在同一个域中读取,这就有可能会被跨站点脚本攻击,而且可能被第三方库读取。为了处理这种情况,我们可以在 cookies 上使用 HTTPOnly这个标签可以让 js 无法读取。
## 11. 内容安全策略CSP
附加的安全层可以检测和缓解某类攻击例如XSS、数据注入。启用方法如下
```-t
Content-Security-Policy: default-src 'self' *.mydomain.com
```
## 12. Cross-Site Request Forgery
跨站请求伪造是一种迫使终端用户在他目前已验证授权的Web应用程序中执行其它的actions。node 社区已实现,可以使用同步令牌模式处理。