Cách bảo vệ /api path cho website
Hiện tại em có đang sử dụng docker và hosting server để chạy thử thì có phát hiện ra 1 lỗ hổng là khi client gõ tay /api/.... thì nó có thể access đến backend và trả về data của web do e có cấu hình nginx như sau
location /api/ { rewrite ^/api(/[^/]+)$ $1/ break; rewrite ^/api/(.*)$ /$1 break; proxy_pass http://backendserver/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
Bây giờ em muốn tìm cách mà chỉ FE access được đến và block với client. Mọi người cho em xin ý kiến về trường hợp này với ạ, và tiện cho em hỏi là bình thường có những cách nào thông dụng mà các web hay sử dụng để tránh client access BE.
3 CÂU TRẢ LỜI
À tiện cho em hỏi luôn là CORS có giúp chặn api trong trường hợp này không ạ, em có nghe 1 bạn bảo dùng cái này nhưng ko rõ làm kiểu gì ạ, em có thử qua vài kiểu origin thì nó vẫn ko chặn được ạ.
CORS chỉ áp dụng với browser thôi. nên nếu access api bằng client khác ngoài trình duyệt thì không ảnh hưởng gì.
hoạt động như thế là bình thường nha e. dù path path /api có public đi chăng nữa thì api cũng thường được secure bằng authentication/authorization
CORS chỉ ngăn request cross-origin từ trình duyệt, không chặn được người gõ tay API hay dùng Postman/curl. Muốn bảo vệ API thì phải có cơ chế xác thực (Authorization header + token, JWT, session cookie…). Và nếu BE của bạn đang public port, thì ai cũng có thể thử gọi. Token/Auth chỉ ngăn người chưa login, nhưng API vẫn lộ ra. Giải pháp an toàn hơn là: không expose BE trực tiếp ra Internet. Chạy BE trong private Docker network và chỉ cho Nginx gọi được. Khi đó user không thể gõ thẳng /api trên BE nữa.