2012-04-27 14 views
7

Trong trường hợp của tôi, tôi đang sử dụng API Dropbox. Hiện tại tôi đang lưu trữ khóa và bí mật trong một tệp JSON, chỉ để tôi có thể gitignore nó và giữ nó ra khỏi repo Github, nhưng rõ ràng là không tốt hơn là có nó trong mã từ một quan điểm bảo mật. Đã có rất nhiều câu hỏi về việc bảo vệ/làm xáo trộn Python trước đây (thường vì lý do thương mại) và câu trả lời luôn là "Đừng, Python không có ý nghĩa như vậy".Tôi nên lưu trữ khóa API trong ứng dụng Python bằng cách nào?

Vì vậy, tôi không tìm cách bảo vệ mã nhưng chỉ là một giải pháp cho phép tôi phân phối ứng dụng mà không tiết lộ chi tiết API của mình.

+0

đặt chúng vào tệp văn bản dưới dạng giá trị được mã hóa. Tạo khóa mã hóa được lưu trữ riêng tư, giải mã khi cần. Có thể có một cách tốt hơn, nhưng cách này đã làm việc tốt cho tôi trong quá khứ. –

+0

Nếu ai đó chạy chương trình trên máy tính của họ và chương trình sử dụng khóa, chương trình sẽ được tiết lộ thực tế. Nó không mất một thiên tài để cháy lên WireShark, hãy để chương trình kết nối, và lọc việc chụp cho các kết nối đến dropbox (hoặc một số tiêu chuẩn khác - trường hợp xấu nhất bạn đang đào qua một vài trăm gói). Và chỉ đơn thuần là làm xáo trộn chương trình sẽ không mua cho bạn bất cứ điều gì, vì bạn không thể thay đổi chuỗi chữ mà khóa API là, hoặc nó sẽ không sử dụng cho chương trình của bạn. – delnan

+0

@delnan Nhưng liệu khóa API có thể hiển thị trong lưu lượng truy cập HTTP không? Dropbox làm mọi thứ qua SSL. Tôi không biết liệu họ có sử dụng các biến GET hoặc POST hay chỉ đặt chúng vào các tiêu đề của yêu cầu HTTP. Những thứ đó được mã hóa trong một yêu cầu HTTPS hay chỉ là phần thân của yêu cầu? – espekia

Trả lời

2

Văn bản thuần túy. Bất kỳ nỗ lực obfuscation là vô ích nếu mã được phân phối.

2

Không biết điều này có khả thi trong trường hợp của bạn hay không. Nhưng bạn có thể truy cập API thông qua proxy mà bạn lưu trữ.

Các yêu cầu từ ứng dụng Python đi tới proxy và proxy thực hiện các yêu cầu tới API Dropbox và trả về phản hồi cho ứng dụng Python. Bằng cách này, khóa api của bạn sẽ là proxy mà bạn đang lưu trữ. Quyền truy cập vào proxy có thể được kiểm soát bằng bất kỳ phương tiện nào bạn thích. (Ví dụ username và password)

+0

Nói chung đó là một giải pháp tốt nhưng trong trường hợp của tôi, tôi đã chọn sử dụng Dropbox đặc biệt vì tôi không có tài nguyên cũng như độ nghiêng để lưu trữ máy chủ của riêng tôi, tôi chỉ muốn tập trung vào việc tạo khách hàng. – espekia

1

Có hai cách tùy thuộc vào kịch bản của bạn:

Nếu bạn đang phát triển một ứng dụng web cho người dùng cuối, chỉ cần lưu trữ nó trong một cách mà khóa API của bạn không đến với tiết lộ . Vì vậy, giữ nó gitignored trong một tập tin riêng biệt và chỉ tải nó lên máy chủ của bạn nên được tốt (miễn là không có vi phạm đến máy chủ của bạn). Bất kỳ obfuscation sẽ không thêm bất kỳ lợi ích thực tế, nó sẽ chỉ cung cấp cho một cảm giác sai về an ninh.

Nếu bạn đang phát triển khung/thư viện cho nhà phát triển hoặc ứng dụng khách cho người dùng cuối, hãy yêu cầu họ tự tạo khóa API.