Nội dung bài viết
Video học lập trình mỗi ngày
Suy nghĩ. Tại sao nhà tuyển dụng lại hỏi vào thẳng câu đó, hay là từ câu đó nếu mà bạn trả lời được thì sẽ dẫn dắt một câu chuyện khác? Bám sát vào câu hỏi. "Nếu accessToken bị đánh cắp thì sẽ xử lý như thế nào cũng như làm sao để phát hiện điều đó?"
Khuyến nghị: Hãy đọc xong hết bài rồi, xem những tips về jwt. Cố gắng xem hỉ...
Đầu tiên phải xem ở đây trách nhiệm của Backend không?
Mạo danh thường không phải là trách nhiệm của BE. Ví dụ: nếu ai đó sử dụng account và mật khẩu của bạn để đăng nhập vào một trang web, làm sao máy chủ có thể biết được bạn đang đăng nhập hay người khác giả danh bạn? Bạn (FE) làm mất vé xem phim (token) thì ai nhặt được sẽ được xem phim (resource) một cách hợp lệ. Chả ai biết...
Khuyến nghị cách code: Xử lý token được sử dụng trái phép và cách xử lý | RefreshToken
Có các trường hợp bị đánh cắp phổ biến như sau
Về lý thuyết, token được bảo vệ thông qua https. Nếu mã token đã bị chặn (middle), điều đó có nghĩa là nó có thể bẻ khóa https (sử dụng free, ít tiền...). Sau đó, tôi có thể thêm bất kỳ field header nào (chẳng hạn như IP, ugent,.. hệ điều hành, trình duyệt, sessionId, v.v.). crack https. token, bạn có thể nhận được thông tin khác Miễn là chúng tôi vẫn đang sử dụng giao thức http, mọi thứ đều có thể được sửa đổi theo cách thủ công.
Một cách phổ biến khác là đặt mã thông báo vào cookie. Nhưng khó với httpOnly: true. JavaScript không thể trực tiếp lấy mã thông báo trong cookie. Thay vào đó, trình duyệt của client sẽ đưa token trong cookie đến máy chủ.
Cách ba: Còn bạn và hacker(anh em , đồng chí :v) ngồi cạnh nhau trước máy tính thì thôi khỏi bàn...
Khuyến khị: Tư duy, kiến trúc một Backend từ level0 đến level5
Làm sao phát hiện token rò rỉ? (trách nhiệm của BE)
Câu chuyện này thật ra anh em tipjs nói nhiều lắm. Quan trọng nó không thể chi tiết hoàn hảo ở mỗi version. Nên xem video ở trên cùng...
Điều quan trọng bạn là BE thì nên xem lại module (hoạt động account): Kiểm tra nhật ký hoạt động account của mỗi user để xác định hành động nào được ủy quyền và hành động nào có thể không được ủy quyền. Nếu phát hiện bất thường, cần báo cáo ngay cho một module security hoặc các bộ phận liên quan khác..
Ở đây nói sơ qua chứ anh em muốn tìm hiểu kỹ thì tôi mong anh em bỏ chút thời gian xem lại những video nói về "JWT Tất cả ở đây". Vì token mà một mã thông báo nên hiểu đơn giản. Nó không chỉ là mã hóa thuật toán đơn giản mà còn bao gồm các thuộc tính khách hàng, info location, network location, v.v., vì nó cùng nhau tạo thành một token tương ứng.
Có bạn sẽ bảo rằng, tôi lấy vị trí ip. Nếu khác ip thì xác định reLogin. OK, không sai. Nhược điểm Nếu IP của người dùng thay đổi thường xuyên trong quá trình sử dụng, thao tác thường sẽ nhắc người dùng đăng nhập lại, điều này khiến trải nghiệm không được thân thiện mà thôi.
Anh chị để ý nếu có chơi bitcoin or blockchain thì một số ứng dụng sẽ cho phép người dùng chọn kiểm soát xem bảo mật mã thông báo có phù hợp với thông tin IP, thiết bị đầu cuối hay network location hay không. Nói chung là whiteList. Or trói buộc cũng được.
Nếu accessToken bị đánh cắp thì sẽ xử lý như thế nào?
Đơn giản mà, bởi vậy các anh em trong tipjs đều hỏi: "Anh ơi, sao họ nói accesstoken không cần lưu trữ?" Bởi lý do đó. Muốn ngăn chặn accessToken bị đánh cắp thì chỉ có cách xóa nó đi or làm mới nó. Mà muốn xóa thì phải lưu. Mà lưu ở đâu thì chúng tôi thường sử dụng redis. Set hết hạn time redis cùng với AT... Do đó, đây cũng chính là các bạn member luôn là người hiểu câu chuyện nhiều nhất. Anh em nên bỏ thời gian vào học tư duy, kiến trúc backend mỗi ngày sẽ tốt hơn nhé các bạn.