http_header.js 1.6 KB

12345678910111213141516171819202122232425262728293031
  1. 'use strict';
  2. module.exports = options => {
  3. return async function httpHeader(ctx, next) {
  4. await next();
  5. // CT-638506 避免获取用户敏感信息
  6. ctx.set('X-Content-Type-Options', 'nosniff');
  7. // CT-638385 点击劫持相关
  8. // 禁止以iframe或者frame的形式嵌入 (deny/sameorign都可)
  9. ctx.set('X-Frame-Options', 'deny');
  10. // CT-638235
  11. // 避免钓鱼欺骗 (启用XSS过滤器。如果检测到攻击,浏览器将不会清理页面,而是完全阻止页面的渲染)
  12. ctx.set('X-XSS-Protection', '1; mode=block');
  13. // 可以节省一次请求重定向(HSTS预加载服务,按指示提交域名后,浏览器将永不使用非安全方式链接)
  14. ctx.set('strict-transport-security', 'max-age=31536000; includeSubDomains; preload');
  15. //
  16. const csp = [
  17. 'default-src', `'self' data: blob: 'unsafe-inline' 'unsafe-eval' https://*.smartcost.com.cn https://*.aliyuncs.com https://*.qq.com/ https://*.baidu.com/ http://*.baidu.com/`,
  18. ];
  19. ctx.set('Content-Security-Policy', csp.join(' '));
  20. // IE8以上版本用户,在下载时,不显示打开选项
  21. ctx.set('X-Download-Options', 'noopen');
  22. // 针对三方网站隐藏referer,防止隐私泄露和钓鱼攻击
  23. // same-origin 同源则发送,反之不发送
  24. // strict-origin 安全级别相同发送,反之不发送(例如https->http)
  25. ctx.set('referer-policy', 'same-origin');
  26. //
  27. ctx.set('X-Permitted-Cross-Domain-Policies', 'master-only');
  28. };
  29. };