跨站请求伪造中间件
1. 简介
2. 安装
go get -u github.com/sagoo-cloud/nexframe3. 基本用法
3.1 使用默认配置
package main
import (
"net/http"
"github.com/gorilla/mux"
"github.com/sagoo-cloud/nexframe/middleware"
)
func main() {
srv := nexframe.Server()
// 使用默认配置的 CSRF 中间件
srv.WithMiddleware(middleware.CSRF())
// 注册控制器
err := srv.BindHandlerFunc("/", homeHandler).Methods("GET")
if err != nil {
return
}
err := srv.BindHandlerFunc("/", submitHandler).Methods("POST")
if err != nil {
return
}
srv.SetPort(":8080")
srv.Run()
}
func homeHandler(w http.ResponseWriter, r *http.Request) {
// 从上下文中获取 CSRF 令牌
token := r.Context().Value("csrf").(string)
// 在表单中使用此令牌
html := `
<form method="POST" action="/submit">
<input type="hidden" name="csrf_token" value="` + token + `">
<input type="submit" value="提交">
</form>`
w.Write([]byte(html))
}
func submitHandler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("表单提交成功!"))
}3.2 使用自定义配置
4. 配置选项
5. 高级用法
5.1 自定义令牌提取
5.2 自定义错误处理
5.3 跳过特定请求
6. 最佳实践
7. 故障排除
8. 示例:在 AJAX 请求中使用 CSRF
9. 结语
最后更新于