@@ -46,9 +46,41 @@ var scanLock sync.Mutex
4646// 上次扫描时间
4747var lastScanTime time.Time
4848
49+ // 添加安全相关HTTP头
50+ func securityMiddleware (next http.Handler ) http.Handler {
51+ return http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
52+ // 防止目录列表
53+ w .Header ().Set ("X-Content-Type-Options" , "nosniff" )
54+ // 防止点击劫持
55+ w .Header ().Set ("X-Frame-Options" , "DENY" )
56+ // XSS保护
57+ w .Header ().Set ("X-XSS-Protection" , "1; mode=block" )
58+ // 内容安全策略
59+ w .Header ().Set ("Content-Security-Policy" , "default-src 'self'; script-src 'self' https://cdn.jsdelivr.net; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://cdn.jsdelivr.net; font-src 'self' https://fonts.gstatic.com https://cdn.jsdelivr.net; img-src 'self' data:;" )
60+ // 不缓存敏感页面
61+ w .Header ().Set ("Cache-Control" , "no-store, no-cache, must-revalidate" )
62+ next .ServeHTTP (w , r )
63+ })
64+ }
65+
4966func main () {
67+ // API路由
5068 http .HandleFunc ("/api/scan" , scanHandler )
51- http .Handle ("/" , http .FileServer (http .Dir ("." )))
69+
70+ // 静态文件处理
71+ fileHandler := http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
72+ // 只允许访问shieldml_scan.html
73+ if r .URL .Path == "/" || r .URL .Path == "/index.html" {
74+ http .Redirect (w , r , "/shieldml_scan.html" , http .StatusFound )
75+ } else if r .URL .Path == "/shieldml_scan.html" {
76+ http .ServeFile (w , r , "shieldml_scan.html" )
77+ } else {
78+ http .Error (w , "拒绝访问" , http .StatusForbidden )
79+ }
80+ })
81+
82+ // 应用安全中间件
83+ http .Handle ("/" , securityMiddleware (fileHandler ))
5284
5385 fmt .Println ("服务已启动:http://localhost:6528/shieldml_scan.html" )
5486 http .ListenAndServe (":6528" , nil )
0 commit comments