Asked Jun 11th, 5:00 AM 292 1 3
  • 292 1 3
+1

Cách bảo mật API của project

Share
  • 292 1 3

Mình có 1 project cá nhân sử dụng API, thực ra thì cũng không hẳn là API cung cấp ra cho các web khác sử dụng, mà mình tách ra để phát triển frontend khác nhau và app. MÌnh có tìm hiểu 1 số cách bảo mật API như dùng JWT và auth. Nhưng mục đích của bảo mật của mình thì chỉ đơn thuần là người ngoài gọi đến API đó thì cũng không thể truy cập được, vì project sẽ có những chức năng không cần người dùng phải đăng nhập vào nên api sẽ gần như là public. Mình có ý định sẽ check theo IP của request gọi API nhưng cảm giác không ổn lắm. Mọi người cho mình xin 1 vài hướng giải quyết với

3 ANSWERS


Answered Jun 11th, 9:12 AM
+3

Câu trả lời là không có cách nào để người ngoài không gọi được API của mình đâu nhé. Người ta chắc chắn sẽ gọi đến được dù bạn làm cách nào.

  • Authentication chỉ là việc định danh người dùng. Sau khi login người ta vẫn có thể dùng được. Thậm chí là còn dùng tool để cho nó chạy tự động.
  • Thông thường thì sẽ theo dõi IP qua access log, khi có bất thường thì cho vào blacklist và ban nó, thêm rate limit để giới hạn số requests có thể gọi.
  • CORS cũng không phải là rào cản người ta dùng proxy là ko bị CORS nữa mà 😄.
Share
Viet Hung @viethung_0110
Jun 11th, 9:50 AM
Tường Vi @hoanglong85
Jun 11th, 11:07 AM
Tuan Anh Nguyen @TuanAnh9996
Jun 11th, 11:14 AM

@huukimit vậy thôi chắc quất bằng IP vậy 😄, nhanh gọn nhẹ

+1
| Reply
Share
Answered Jun 11th, 5:18 AM
+1

Cách đây 1 năm, mình cũng gặp tình hình khá giống của bạn, vấn đề này mình mất khoảng 1 tuần để tìm ra solution (kiểu khách không đăng nhập, mà coi như đã đăng nhập rồi). Ở server bạn hãy tạo 1 token key JWT và redirect có đường dẫn https://abc,xyz?token=xyzkjhkjsahkdsakdgjashdjkhsajd cho phía client, và client sẽ check token ngược lại server để kiểm tra 1 lần nữa lưu thông tin User, info các thứ. Sau đó trở đi, mỗi API cần có quyền thì từ client gửi lên server đều check Header authorizaion để check key còn hạn hay không. Với cơ chế kiểu này thì token của bạn nên có session rất ngắn khoảng vài tiếng thôi. Và gần hết hạn token sẽ gửi refresh token là được. Vẫn đảm bảo không cần đăng nhập mà vẫn vào được gần như đã đăng nhập rồi. 😀 JWT awesome hơn chúng ta nghĩ 1 server mà nhiều client dùng chung cũng không vấn đề gì cả.

Share
Tuan Anh Nguyen @TuanAnh9996
Jun 11th, 5:37 AM

vấn đề của mình thì thực ra cũng không liên quan lắm đến việc xác thực user vì vấn đề này mình có hướng làm rồi. Vấn đề minhf gặp phải bây giờ là bảo mật toàn bộ api của project, để kể cả người khác có dùng token để gọi lên server nhưng nếu request ko được gửi từ server frontend của mình thì cũng sẽ không gọi api đc. Mình đang muốn tránh việc những api không cần key thì người ta có thể chạy job để lấy dữ liệu từ đó về. Ví dụ như api bài viết chẳng hạn, nó sẽ không cần xác thực để gọi đến api đấy, nhưng nếu ai biết cái api đấy thì có thể dùng postman... để lấy dữ liệu về

0
| Reply
Share
Jun 11th, 5:56 AM

@TuanAnh9996 check IP, hoặc chỉ public trong mạng nội bộ, còn cách nào khác thì mình cũng không biết.

0
| Reply
Share
Tuan Anh Nguyen @TuanAnh9996
Jun 11th, 6:03 AM

@quanghung97 mình cũng tính check IP nhưng thấy có vẻ không ổn nên up vào đây hỏi người có kinh nghiệm hơn 😄

0
| Reply
Share
Tran Nghia @taiken
Jun 11th, 8:36 AM

Dùng cái gọi là CORS để cho phép những host bạn muôn request API được nhé

0
| Reply
Share
Jun 11th, 8:40 AM

@taiken cái CORS ý nghĩa là chia sẻ thông tin website trong cùng 1 subdomain, ý tưởng này khá ổn 😃 như kiểu đa dịch vụ google ấy 😃

0
| Reply
Share
Jun 11th, 10:30 AM

@taiken Không hẳn đâu bạn, dùng qua proxy thì ko bị CORS đâu nhé.

0
| Reply
Share
Answered Jun 11th, 11:10 AM
0

Cái này theo mình bạn có thể sử dụng 1 chuỗi bạn tự quy định và băm nó phía client và gửi lên server thì bạn kiểm tra cái chuỗi băm đó xem có đúng là từ client được phép không. Bạn có thể tham khảo cái hash password của cái này khá hay https://www.openwall.com/phpass Wordpress cũng dùng cái này để băm password người dùng. Điều hay của nó là cùng 1 chuỗi nhưng mỗi lần nó băm lại ra 1 chuỗi khác nhau nên việc dò sẽ rất khó

Share