Ví dụ này có một số khía cạnh khác nhau với nó. Tôi sẽ đề cập đến một vài điểm mà tôi không nghĩ rằng đã được đề cập rõ ràng ở nơi khác.
Bảo vệ bí mật trong quá cảnh
Điều đầu tiên cần lưu ý là việc truy cập API dropbox bằng cơ chế xác thực ứng dụng của họ yêu cầu bạn truyền khóa và bí mật của mình. Kết nối là HTTPS, có nghĩa là bạn không thể chặn lưu lượng mà không biết chứng chỉ TLS. Điều này là để ngăn chặn một người chặn và đọc các gói trên hành trình của họ từ thiết bị di động đến máy chủ. Đối với người dùng bình thường, đó là một cách thực sự tốt để đảm bảo sự riêng tư của lưu lượng truy cập của họ.
Những gì nó không tốt, là ngăn chặn một kẻ độc hại tải xuống ứng dụng và kiểm tra lưu lượng. Thật sự dễ dàng khi sử dụng proxy trung gian cho tất cả lưu lượng truy cập vào và ra khỏi thiết bị di động. Nó sẽ không yêu cầu tháo gỡ hoặc thiết kế ngược mã để trích xuất khóa ứng dụng và bí mật trong trường hợp này do bản chất của API Dropbox.
Bạn có thể thực hiện ghim kiểm tra xem chứng chỉ TLS bạn nhận được từ máy chủ có phải là chứng chỉ bạn mong đợi không. Điều này thêm một kiểm tra cho khách hàng và làm cho việc chặn lưu lượng truy cập khó khăn hơn. Điều này sẽ khiến việc kiểm tra lưu lượng trong chuyến bay trở nên khó khăn hơn, nhưng kiểm tra ghim xảy ra trong máy khách, do đó có khả năng vẫn có thể vô hiệu hóa kiểm tra ghim. Nó làm cho nó khó hơn mặc dù.
Bảo vệ bí mật khi nghỉ ngơi
Bước đầu tiên, sử dụng một cái gì đó như proguard sẽ giúp làm cho nó ít rõ ràng hơn khi có bất kỳ bí mật nào được giữ. Bạn cũng có thể sử dụng NDK để lưu trữ khóa và bí mật và gửi yêu cầu trực tiếp, điều này sẽ giúp giảm đáng kể số lượng người có kỹ năng phù hợp để trích xuất thông tin. Việc che giấu thêm có thể đạt được bằng cách không lưu trữ các giá trị trực tiếp trong bộ nhớ trong bất kỳ khoảng thời gian nào, bạn có thể mã hóa chúng và giải mã chúng ngay trước khi sử dụng theo đề xuất của câu trả lời khác.
Tùy chọn nâng cao hơn
Nếu bây giờ bạn đang hoang tưởng về việc đặt bí mật ở bất cứ đâu trong ứng dụng của mình và bạn có thời gian và tiền bạc để đầu tư vào các giải pháp toàn diện hơn, thì bạn có thể xem xét việc lưu trữ thông tin đăng nhập trên máy chủ của mình (giả sử bạn có bất kỳ). Điều này sẽ làm tăng độ trễ của bất kỳ cuộc gọi nào tới API, vì nó sẽ phải liên lạc qua máy chủ của bạn và có thể làm tăng chi phí vận hành dịch vụ của bạn do tăng thông lượng dữ liệu.
Sau đó, bạn phải quyết định cách tốt nhất để liên lạc với máy chủ của mình để đảm bảo chúng được bảo vệ. Điều này rất quan trọng để ngăn chặn tất cả các vấn đề tương tự xuất hiện trở lại với API nội bộ của bạn. Nguyên tắc tốt nhất tôi có thể đưa ra là không truyền trực tiếp bất kỳ bí mật nào vì mối đe dọa trung gian. Thay vào đó, bạn có thể ký lưu lượng bằng cách sử dụng bí mật của mình và xác minh tính toàn vẹn của bất kỳ yêu cầu nào đến máy chủ của bạn. Một cách tiêu chuẩn để làm điều này là tính toán một HMAC của thông điệp được khóa trong một bí mật. Tôi làm việc tại một công ty có một sản phẩm bảo mật cũng hoạt động trong lĩnh vực này, đó là lý do tại sao loại công cụ này làm tôi quan tâm. Trong thực tế, đây là một bài viết blog từ một trong những đồng nghiệp của tôi đi qua hầu hết điều này.
Tôi nên làm bao nhiêu?
Với bất kỳ lời khuyên bảo mật nào như thế này, bạn cần đưa ra quyết định chi phí / lợi ích về mức độ khó khăn của bạn khi khiến ai đó đột nhập. Nếu bạn là ngân hàng bảo vệ hàng triệu khách hàng, ngân sách của bạn hoàn toàn khác với ai đó hỗ trợ ứng dụng trong họ thời gian rảnh. Hầu như không thể ngăn ai đó phá vỡ an ninh của bạn, nhưng trong thực tế, rất ít người cần tất cả chuông và còi và với một số biện pháp phòng ngừa cơ bản, bạn có thể đi được một chặng đường dài.