快速瞭解helmet的使用

Helmet是什麼?

helmetexpress的中間件,經過設置各類header來爲express應用提供安全保護。雖然不能徹底杜絕安全問題,但確實能提供某種程度的保護。express

快速上手

helmet的使用很是簡單。首先使用npm安裝helmetnpm

npm install helmet --save
複製代碼

其次在express應用中使用該中間件:瀏覽器

const express = require('express')
const helmet = require('helmet')
 
const app = express()
 
app.use(helmet())
複製代碼

helmet包含了多箇中間件,每一箇中間件既能夠單獨使用,也能夠經過helmet()集中配置。以是否禁用緩存的noCache中間件爲例:緩存

單獨使用中間件:安全

app.use(helmet.noCache());
複製代碼

helmet函數中配置:bash

app.use(helmet({
    noCache: true
}));
複製代碼

咱們接下來分別看一下幾個主要的中間件的做用.服務器

hidePoweredBy

攻擊者能夠針對X-Powered-By中暴露的服務器語言的漏洞進行攻擊。cookie

hidePoweredBy能夠隱藏或混淆響應頭中的X-Powered-By字段以迷惑攻擊者。app

app.use(helmet.hidePoweredBy());
複製代碼

也能夠經過設置假的字段值來欺騙攻擊者:xss

app.use(helmet.hidePoweredBy({setTo: 'PHP 4.2.0'}));
複製代碼

frameguard

攻擊者騙取用戶點擊一個以iframe的方式隱藏的頁面,來獲取用戶的信息。

frameguard經過設置x-frame-options來容許iframe的域。

app.use(helmet.frameguard({action: 'deny'}));
複製代碼

xssFilter

設置X-XSS-Protection提供基本的XSS防禦,避免基本的反射性XSS攻擊。

// Sets "X-XSS-Protection: 1; mode=block".
app.use(helmet.xssFilter());
複製代碼

noSniff

若是響應頭中Content-Type沒有指定,瀏覽器默認會自動嘗試識別響應體的內容以正確解析響應的文件。

設置 X-Content-Type-Optionsnosniff後,瀏覽器再也不進行自動識別。這意味着響應的文件類型若是與Content-Type中聲明的不一致,將會被瀏覽器屏蔽掉。

app.use(helmet.noSniff());
複製代碼

ieNoOpen

有些站點可能提供了HTML文件的下載,部分IE瀏覽器中,該文件會在站點的上下文打開,存在腳本注入的風險。

設置X-Download-Optionsnoopen不容許在在站點的上下文打開下載的HTML文件。

app.use(helmet.ieNoOpen());
複製代碼

hsts

設置Strict-Transport-Security告知用戶在必定的時間段使用https訪問。防止降級攻擊和cookie劫持。

以下設置將來的90天內只使用https訪問。

app.use(helmet.hsts({maxAge: 7776000}));
複製代碼

dnsPrefetchControl

dns-prefetch在提高網站性能的同時,潛在地會致使用戶隱私泄露、dns服務過載、頁面統計失真等問題。

dnsPrefetchControl經過將X-DNS-Prefetch-Control設置爲off禁止瀏覽器進行DNS預解析。

app.use(helmet.dnsPrefetchControl())
複製代碼

總結

以上簡單介紹了helmet的用法和幾個默認開啓的中間件。helmet經過添加各類響應頭來提供基本的安全防禦。剩餘未介紹到的中間件能夠查閱其官方文檔。

相關文章
相關標籤/搜索