Cách bảo mật trong rails
Chào mọi người,
Hiện giờ em đang làm 1 ứng dụng web backend bằng rails api. Sử dụng jason web token để xác thực người dùng.
Em có 1 thắc mắc nhỏ: Đó là hiện giờ sau khi user đăng nhập thành công thì em sẽ trả về 1 mã token (hiện em đang set thời gian hết hạn là 2 ngày).
Trong khi token chưa hết hạn thì user gửi request lên kèm theo token đó thì em sẽ trả về dữ liệu. Em có 1 thắc mắc nhỏ sau:
Giả sử 1 token ở máy tính của em chưa hết hạn, bị người khác lấy trộm rồi đem về máy của họ gửi request lên => có phải lúc này họ có thể lấy được data của em.?
Và nếu họ có thể thể truy cập sau khi lấy trọm token của em như trên thì có cách nào để phòng chống việc này không?
Cảm ơn mọi người đã bỏ thời gian đọc câu hỏi
1 CÂU TRẢ LỜI
Giả sử 1 token ở máy tính của em chưa hết hạn, bị người khác lấy trộm rồi đem về máy của họ gửi request lên => có phải lúc này họ có thể lấy được data của em.?
Đúng rồi em, khi mà token của tài khoản của em bị người khác lấy, thì họ có thể dùng nó để gửi mọi request lên server, để thực hiện những action mà token đó có quyền. Họ hoàn toàn có thể xem, tạo mới, chỉnh sửa, xoá dữ liệu của em.
Thực tế thì vấn đề này không chỉ xảy ra khi em dùng token, cả với cơ chế login thông thường thì em cũng có thể gặp phải tình trạng tương tự, khi mà dữ liệu từ form submit username/password, hay dữ liệu trong cookie của em cũng có thể bị người khác lấy trộm. (thông qua việc bắt và đọc gói tin mà máy tính của em truyền đi)
Và nếu họ có thể thể truy cập sau khi lấy trọm token của em như trên thì có cách nào để phòng chống việc này không?
Cách đơn giản để giải quyết bài toán này đó chính là phải làm thế nào để người khác không thể lấy được token của em. Và HTTPS chính là câu trả lời cho vấn đề này
HTTPS sẽ giúp em mã hoá được dữ liệu truyền lên, cũng như dữ liệu nhận về từ server, khiến cho người khác dù có bắt được những requests này đi chăng nữa, thì cũng không thể đọc được dữ liệu này.
Em có thể tìm hiểu thêm về HTTPS qua một vài bài viết ở dưới đây:
- https://viblo.asia/p/http-vs-https-lam-the-nao-de-website-bao-mat-hon-voi-ssl-jvElaLbxZkw
- https://viblo.asia/p/https-la-gi-va-huong-dan-cai-dat-NznmMdpoMr69
- https://viblo.asia/p/https-va-ssl-OeVKBg4AZkW
- https://viblo.asia/p/bao-mat-cua-http-va-https-4P856RgO5Y3
- https://viblo.asia/p/ssltls-la-gi-Do754wnBlM6
Ngoài ra, một số trang web có thể làm chặt chẽ hơn là họ gắn token với địa chỉ IP hiện tại của em, và sẽ vô hiệu hoá token đó nếu nó được gửi từ một IP khác. Đó cũng là một cách mà em có thể tham khảo thêm.
@thangtd90 dạ em cảm ơn anh, câu trả lời chi tiết quá, cảm ơn anh nhiều nhiều