Helmet
ExpressでSecurity Headersをやるlibrary
app.use(helmet())と記述するだけ15個のmiddrewareが入る
default値が厳しめなのでちゃんと確認したほうがいい
app.use(helmet())ではなく、15個明示的に列挙したほうがわかりやすいと思うmrsekut.icon
docs
github
npm
helmet.contentSecurityPolicy()
helmet.crossOriginEmbedderPolicy()
helmet.crossOriginOpenerPolicy()
helmet.crossOriginResourcePolicy()
helmet.dnsPrefetchControl()
helmet.expectCt()
helmet.frameguard()
helmet.originAgentCluster()
helmet.permittedCrossDomainPolicies()
殆どの場合、問答無用で指定すべき項目
helmet.hsts()
Strict-Transport-Securityを指定する
prealodはdefaultでfalseになっていることに注意mrsekut.icon
max-ageのdefault値は180days
指定すべきだったり、指定すべきでなかったりする項目
helmet.referrerPolicy()
Referrer-Policyの設定
defaultはno-referrer(最も厳しい)
もしかしたらanalyticsが取れなくなるかもしれないので注意が必要
helmet.hidePoweredBy()
x-powered-byを非表示にする
X-Powerd-By: Expressがheaderから非表示になる
ただ、これを付けたからといって特に安全にはならないことに注意
x-powered-byがなくてもExpressかどうかを判定する方法はある ref
helmet.xssFilter()
X-XSS-Protectionを無効にする設定
X-XSS-Protection自体が渋くて、0、1どっちを指定しても完璧にはならないmrsekut.icon
なんとも言えないので指定しなくても良い気がする
browserのdefault挙動に任せる
IEをサポートしないなら気にしなくて良さそう
helmet.noSniff()
X-Content-Type-Optionsを指定する
helmet.ieNoOpen()
X-Download-Optionsを指定する
リリースノートが書かれてないのでmajor updateの詳細がわからんmrsekut.icon
e.g. v6, v7
https://expressjs.com/ja/advanced/best-practice-security.html#use-helmet