摘要:前言 安全性,總是一個不可忽視的問題。許多人都承認這點,但是卻很少有人真的認真地對待它。所以我們列出了這個清單,讓你在將你的應用部署到生產環境來給千萬用戶使用之前,做一個安全檢查。 以下列出的安全項,大多都具有普適性,適用于除了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。
客戶端的敏感數據
當部署前端應用時,確保不要在代碼中暴露如密鑰這樣的敏感數據,這將可以被所有人看到。
現今并沒有什么自動化檢測它們的辦法,但是還是有一些手段可以用來減少不小心將敏感數據暴露在客戶端的概率: