摘要:前言 安全性,总是一个不可忽视的问题。许多人都承认这点,但是却很少有人真的认真地对待它。所以我们列出了这个清单,让你在将你的应用部署到生产环境来给千万用户使用之前,做一个安全检查。 以下列出的安全项,大多都具有普适性,适用于除了Node.js外的各种语言和框架。
前言
安全性,总是一个不可忽视的问题。许多人都承认这点,但是却很少有人真的认真地对待它。所以我们列出了这个清单,让你在将你的应用部署到生产环境来给千万用户使用之前,做一个安全检查。
以下列出的安全项,大多都具有普适性,适用于除了Node.js外的各种语言和框架。但是,其中也包含一些用Node.js写的小工具。
配置管理
安全性相关的HTTP头
以下是一些安全性相关的HTTP头,你的站点应该设置它们:
Strict-Transport-Security:强制使用安全连接(SSL/TLS之上的HTTPS)来连接到服务器。
X-Frame-Options:提供对于“点击劫持”的保护。
X-XSS-Protection:开启大多现代浏览器内建的对于跨站脚本攻击(XSS)的过滤功能。
X-Content-Type-Options: 防止浏览器使用MIME-sniffing来确定响应的类型,转而使用明确的content-type来确定。
Content-Security-Policy:防止受到跨站脚本攻击以及其他跨站注入攻击。
在Node.js中,这些都可以通过使用Helmet模块轻松设置完毕:
varexpress=require('express');
varhelmet=require('helmet');
varapp=express();
app.use(helmet());
Helmet在Koa中也能使用:koa-helmet。
当然,在许多的架构中,这些头会在Web服务器(Apache,nginx)的配置中设置,而不是在应用的代码中。如果是通过nginx配置,配置文件会类似于如下例子:
#nginx.conf
add_header X-Frame-OptionsSAMEORIGIN;
add_header X-Content-Type-Optionsnosniff;
add_header X-XSS-Protection"1; mode=block";
add_headerContent-Security-Policy"default-src 'self'";
完整的例子可以参考这个nginx配置。
如果你想快速确认你的网站是否都设置这些HTTP头,你可以通过这个网站在线检查:http://cyh.herokuapp.com/cyh。
客户端的敏感数据
当部署前端应用时,确保不要在代码中暴露如密钥这样的敏感数据,这将可以被所有人看到。
现今并没有什么自动化检测它们的办法,但是还是有一些手段可以用来减少不小心将敏感数据暴露在客户端的概率: