## Secure (安全) 中間件
Secure 中間件用于阻止跨站腳本攻擊(XSS),內容嗅探,點擊劫持,不安全鏈接等其他代碼注入攻擊。
*使用*
```go
e.Use(middleware.Secure())
```
### 自定義配置
*用法*
```go
e := echo.New()
e.Use(middleware.SecureWithConfig(middleware.SecureConfig{
XSSProtection: "",
ContentTypeNosniff: "",
XFrameOptions: "",
HSTSMaxAge: 3600,
ContentSecurityPolicy: "default-src 'self'",
}))
```
傳遞空的 ?`XSSProtection`,?`ContentTypeNosniff`,?`XFrameOptions`?或 `ContentSecurityPolicy` 來禁用這項保護。
### 配置
```go
SecureConfig struct {
// Skipper 定義了一個跳過該中間件的函數。
Skipper Skipper
// XSSProtection 通過設置`X-XSS-Protection`頭
// 來提供XSS攻擊的防護。
// 可選。默認值 "1; mode=block"。
XSSProtection string `json:"xss_protection"`
// ContentTypeNosniff 通過設置`X-Content-Type-Options`頭
// 來防止內容嗅探。
// 可選。默認值 "nosniff"。
ContentTypeNosniff string `json:"content_type_nosniff"`
// XFrameOptions 被用來指示是否允許瀏覽器在<fram>,<iframe>或者<object>中渲染頁面。
// 網站可以通過這樣來避免點擊劫持,保證網站的內容不會被其他站點嵌入。
// 可選。默認值 "SAMEORIGIN".
// 可使用的值:
// `SAMEORIGIN` - 頁面只能在同域名的頁面下被渲染。
// `DENY` - 頁面不允許在 frame 中顯示。
// `ALLOW-FROM uri` - 頁面只能在指定域名的 frame 中顯示。
XFrameOptions string `json:"x_frame_options"`
// HSTSMaxAge 設置 `Strict-Transport-Security` 頭來指示瀏覽器需要記住這個網站只能通過HTTPS來訪問的時間(單位秒)。
// 這樣可以減少遭受中間人攻擊(HITM)的幾率。
// 可選。默認值 0。
HSTSMaxAge int `json:"hsts_max_age"`
// HSTSExcludeSubdomains 不會在`Strict Transport Security`中設置`includeSubdomains`標簽。
// 即從安全規則中排除所有子域名。
// header, excluding all subdomains from security policy. It has no effect
// 只有在HSTSMaxAge 被設置為非0值時該參數才有效。
// 可選。默認值 false。
HSTSExcludeSubdomains bool `json:"hsts_exclude_subdomains"`
// ContentSecurityPolicy 用來設置 `Content-Security-Policy` 頭。
// `Content-Security-Policy` 用來定義頁面可以加載哪些資源,減少XSS等通過運行不安全代碼的注入攻擊。
// 可選。默認值 "".
ContentSecurityPolicy string `json:"content_security_policy"`
}
```
*默認配置*
```go
DefaultSecureConfig = SecureConfig{
Skipper: defaultSkipper,
XSSProtection: "1; mode=block",
ContentTypeNosniff: "nosniff",
XFrameOptions: "SAMEORIGIN",
}
```