Secure (安全) 中间件

Secure 中间件用于阻止跨站脚本攻击(XSS),内容嗅探,点击劫持,不安全链接等其他代码注入攻击。

使用

  1. e.Use(middleware.Secure())

自定义配置

用法

  1. e := echo.New()
  2. e.Use(middleware.SecureWithConfig(middleware.SecureConfig{
  3. XSSProtection: "",
  4. ContentTypeNosniff: "",
  5. XFrameOptions: "",
  6. HSTSMaxAge: 3600,
  7. ContentSecurityPolicy: "default-src 'self'",
  8. }))

传递空的 XSSProtection, ContentTypeNosniff, XFrameOptionsContentSecurityPolicy 来禁用这项保护。

配置

  1. SecureConfig struct {
  2. // Skipper 定义了一个跳过该中间件的函数。
  3. Skipper Skipper
  4. // XSSProtection 通过设置`X-XSS-Protection`头
  5. // 来提供XSS攻击的防护。
  6. // 可选。默认值 "1; mode=block"。
  7. XSSProtection string `json:"xss_protection"`
  8. // ContentTypeNosniff 通过设置`X-Content-Type-Options`头
  9. // 来防止内容嗅探。
  10. // 可选。默认值 "nosniff"。
  11. ContentTypeNosniff string `json:"content_type_nosniff"`
  12. // XFrameOptions 被用来指示是否允许浏览器在<fram>,<iframe>或者<object>中渲染页面。
  13. // 网站可以通过这样来避免点击劫持,保证网站的内容不会被其他站点嵌入。
  14. // 可选。默认值 "SAMEORIGIN".
  15. // 可使用的值:
  16. // `SAMEORIGIN` - 页面只能在同域名的页面下被渲染。
  17. // `DENY` - 页面不允许在 frame 中显示。
  18. // `ALLOW-FROM uri` - 页面只能在指定域名的 frame 中显示。
  19. XFrameOptions string `json:"x_frame_options"`
  20. // HSTSMaxAge 设置 `Strict-Transport-Security` 头来指示浏览器需要记住这个网站只能通过HTTPS来访问的时间(单位秒)。
  21. // 这样可以减少遭受中间人攻击(HITM)的几率。
  22. // 可选。默认值 0。
  23. HSTSMaxAge int `json:"hsts_max_age"`
  24. // HSTSExcludeSubdomains 不会在`Strict Transport Security`中设置`includeSubdomains`标签。
  25. // 即从安全规则中排除所有子域名。
  26. // header, excluding all subdomains from security policy. It has no effect
  27. // 只有在HSTSMaxAge 被设置为非0值时该参数才有效。
  28. // 可选。默认值 false。
  29. HSTSExcludeSubdomains bool `json:"hsts_exclude_subdomains"`
  30. // ContentSecurityPolicy 用来设置 `Content-Security-Policy` 头。
  31. // `Content-Security-Policy` 用来定义页面可以加载哪些资源,减少XSS等通过运行不安全代码的注入攻击。
  32. // 可选。默认值 "".
  33. ContentSecurityPolicy string `json:"content_security_policy"`
  34. }

默认配置

  1. DefaultSecureConfig = SecureConfig{
  2. Skipper: defaultSkipper,
  3. XSSProtection: "1; mode=block",
  4. ContentTypeNosniff: "nosniff",
  5. XFrameOptions: "SAMEORIGIN",
  6. }