node-npm安全性插件helmet(防护包含点击劫持、xss、嗅探攻击...)

helmet.js

基于node-express的一款安全防护中间件,可以通过设置各种HTTP标题来帮助您保护您的Express应用程序。

一、安装

首先运行

npm install helmet --save

引用

var express = require('express')
var helmet = require('helmet')

var app = express()
//使用helmet全部功能
app.use(helmet())
//单独使用某一功能
app.use(helmet.noCache())

二、作用

引入 描述
require(‘helmet-csp’) 配置内容安全策略
require(‘expect-ct’) 配置预期证书透明度
require(‘dns-prefetch-control’) DNS欲缓冲配置
require(‘frameguard’) 点击劫持防护
require(‘hide-powered-by’) 隐匿或虚假配置程序运行支持
require(‘hpkp’) 绑定HTTP公钥防止修改
require(‘hsts’) 使用https而不是http
require(‘ienoopen’) 防止html下载
require(‘nocache’) 禁用浏览器缓存
require(‘dont-sniff-mimetype’) 禁止嗅探MIME类型
require(‘referrerPolicy’) 隐藏Referer标题
require(‘x-xss-protection’) 防止部分XSS攻击

三、CSP策略

内容安全策略CSP(Content-Security-Policy),对于这个设置,可以帮助防止JavaScriptCSS,插件等方式的恶意注入。

大多数现代浏览器都支持一个标题Content-Security-Policy,这个标题实际上是允许在你的页面上的白名单。您可以将JavaScriptCSS,图像,插件等等列入白名单。

假设你有一个网站没有链接到外部资源,只是链接你自己的东西。你可以设置一个标题,如下所示:

Content-Security-Policy: default-src 'self'

这有效地告诉浏览器“只加载来自我自己的域的东西”。如果您正在运行example.com并且用户试图加载https://example.com/my-javascript.js,那么它将会正常运行。但是,如果用户尝试加载http://evil.com/evil.js,它将不会加载!

使用helmet增强CSP的安全性配置

// 首先确保你运行过 "npm install helmet-csp" 来获取csp的包
// 引入基于helmet的csp包
var csp = require('helmet-csp')

//各类资源文件的白名单配置
app.use(csp({
  directives: {
    defaultSrc: ["'self'", 'default.com'],
    styleSrc: ["'self'", 'maxcdn.bootstrapcdn.com'],
    imgSrc: ['img.com', 'data:'],
    sandbox: ['allow-forms', 'allow-scripts'],
    reportUri: '/report-violation',
    objectSrc: [], // An empty array allows nothing through
  }
})

更多配置

四、点击劫持(Clickjacking)

说到点击劫持首先应该清楚HTML的