Browse Source

API improve security: returns 404 for unauthenticated API requests

mhsanaei 4 days ago
parent
commit
3f62592e4b
2 changed files with 14 additions and 5 deletions
  1. 14 1
      web/controller/api.go
  2. 0 4
      web/controller/xui.go

+ 14 - 1
web/controller/api.go

@@ -1,7 +1,10 @@
 package controller
 package controller
 
 
 import (
 import (
+	"net/http"
+
 	"github.com/mhsanaei/3x-ui/v2/web/service"
 	"github.com/mhsanaei/3x-ui/v2/web/service"
+	"github.com/mhsanaei/3x-ui/v2/web/session"
 
 
 	"github.com/gin-gonic/gin"
 	"github.com/gin-gonic/gin"
 )
 )
@@ -21,11 +24,21 @@ func NewAPIController(g *gin.RouterGroup) *APIController {
 	return a
 	return a
 }
 }
 
 
+// checkAPIAuth is a middleware that returns 404 for unauthenticated API requests
+// to hide the existence of API endpoints from unauthorized users
+func (a *APIController) checkAPIAuth(c *gin.Context) {
+	if !session.IsLogin(c) {
+		c.AbortWithStatus(http.StatusNotFound)
+		return
+	}
+	c.Next()
+}
+
 // initRouter sets up the API routes for inbounds, server, and other endpoints.
 // initRouter sets up the API routes for inbounds, server, and other endpoints.
 func (a *APIController) initRouter(g *gin.RouterGroup) {
 func (a *APIController) initRouter(g *gin.RouterGroup) {
 	// Main API group
 	// Main API group
 	api := g.Group("/panel/api")
 	api := g.Group("/panel/api")
-	api.Use(a.checkLogin)
+	api.Use(a.checkAPIAuth)
 
 
 	// Inbounds API
 	// Inbounds API
 	inbounds := api.Group("/inbounds")
 	inbounds := api.Group("/inbounds")

+ 0 - 4
web/controller/xui.go

@@ -8,8 +8,6 @@ import (
 type XUIController struct {
 type XUIController struct {
 	BaseController
 	BaseController
 
 
-	inboundController     *InboundController
-	serverController      *ServerController
 	settingController     *SettingController
 	settingController     *SettingController
 	xraySettingController *XraySettingController
 	xraySettingController *XraySettingController
 }
 }
@@ -31,8 +29,6 @@ func (a *XUIController) initRouter(g *gin.RouterGroup) {
 	g.GET("/settings", a.settings)
 	g.GET("/settings", a.settings)
 	g.GET("/xray", a.xraySettings)
 	g.GET("/xray", a.xraySettings)
 
 
-	a.inboundController = NewInboundController(g)
-	a.serverController = NewServerController(g)
 	a.settingController = NewSettingController(g)
 	a.settingController = NewSettingController(g)
 	a.xraySettingController = NewXraySettingController(g)
 	a.xraySettingController = NewXraySettingController(g)
 }
 }