2013-03-03 28 views
30

Các training class for Selling In-app Products in Android gợi ý để sử dụng một tải trọng khi thực hiện một yêu cầu mua:Điều gì sẽ được sử dụng làm trọng tải của nhà phát triển trong API thanh toán trong ứng dụng của Google?

Đối số thứ năm chứa một chuỗi 'nhà phát triển tải trọng' mà bạn có thể sử dụng để gửi thông tin bổ sung về đơn hàng (nó có thể là một chuỗi rỗng) . Thông thường, điều này được sử dụng để chuyển vào một mã thông báo chuỗi xác định duy nhất yêu cầu mua hàng này. Nếu bạn chỉ định giá trị chuỗi, Google Play sẽ trả về chuỗi này cùng với phản hồi mua hàng. Sau đó, khi bạn đưa ra các truy vấn về giao dịch mua này, Google Play sẽ trả về chuỗi này cùng với chi tiết mua hàng.

Đề xuất bảo mật: Thực tiễn tốt là chuyển một chuỗi giúp ứng dụng của bạn xác định người dùng đã mua, để sau này bạn có thể xác minh rằng đây là giao dịch mua hợp pháp của người dùng đó. Đối với các mặt hàng tiêu hao, bạn có thể sử dụng một chuỗi được tạo ngẫu nhiên, nhưng đối với các mặt hàng không tiêu thụ, bạn nên sử dụng một chuỗi xác định duy nhất người dùng.

Các Implementing IAB Purchase page có một đề xuất tương tự, với đề nghị bổ sung rằng giá trị tải trọng nên được kiểm tra trên máy chủ an toàn của riêng bạn:

An Khuyến nghị: Khi bạn gửi một yêu cầu mua, tạo ra một Mã thông báo chuỗi xác định duy nhất yêu cầu mua hàng này và bao gồm mã thông báo này trong developerPayload.You có thể sử dụng chuỗi được tạo ngẫu nhiên làm mã thông báo. Khi bạn nhận được phản hồi mua hàng từ Google Play, hãy đảm bảo kiểm tra chữ ký dữ liệu được trả về, orderId và chuỗi chuỗi nhà phát triển. Để bảo mật hơn, bạn nên thực hiện việc kiểm tra trên máy chủ bảo mật của riêng bạn. Đảm bảo xác minh rằng orderId là một giá trị duy nhất mà bạn chưa xử lý trước đây và chuỗi developersPayload khớp với mã thông báo mà bạn đã gửi trước đó với yêu cầu mua.

Nhìn vào mã nguồn cho các ứng dụng không đáng kể Drive mà Google đang sử dụng để chứng minh các API, tôi thấy cảnh báo này:

* WARNING: Locally generating a random string when starting a purchase and 
* verifying it here might seem like a good approach, but this will fail in the 
* case where the user purchases an item on one device and then uses your app on 
* a different device, because on the other device you will not have access to the 
* random string you originally generated. 
* 
* So a good developer payload has these characteristics: 
* 
* 1. If two different users purchase an item, the payload is different between them, 
* so that one user's purchase can't be replayed to another user. 
* 
* 2. The payload must be such that you can verify it even when the app wasn't the 
* one who initiated the purchase flow (so that items purchased by the user on 
* one device work on other devices owned by the user). 
* 
* Using your own server to store and verify developer payloads across app 
* installations is recommended. 

Vì vậy, từ tất cả những thông điệp này, có vẻ như một ý tưởng tồi để sử dụng số ngẫu nhiên/chuỗi cho tải trọng. Ngoài ra, sau khi đọc cảnh báo cuối cùng, có vẻ như một ý tưởng tồi để chuyển ID thiết bị là tải trọng vì nó sẽ khác nhau cho cùng một người dùng trên các thiết bị khác nhau. Vì vậy, những gì nên được sử dụng cho tải trọng phát triển?

Ứng dụng của tôi cung cấp chức năng cục bộ mà người dùng có thể truy cập mà không phải đăng nhập vào bất kỳ dịch vụ nào. Vì vậy, không có khái niệm về 'người dùng' và cũng không có thành phần phía máy chủ. Yêu cầu mua hàng trong ứng dụng là để nâng cấp loại bỏ quảng cáo khỏi ứng dụng. Liệu nó có ý nghĩa đối với một ứng dụng như thế này để sử dụng tính năng tải trọng, hay tôi tốt hơn chỉ sử dụng một chuỗi rỗng cho nó và để nó dễ bị phát lại các cuộc tấn công?

+8

tại sao họ không làm cho nó đơn giản cho tất cả mọi người và làm những gì amazon và táo làm và cung cấp một dịch vụ xác nhận biên lai bên ngoài? –

+0

@MichaelWiles họ thực hiện, hãy kiểm tra API androidpublisher (https://developers.google.com/apis-explorer/#p/androidpublisher/v2/), đặc biệt là phương pháp androidpublisher.purchases.products.get – tomrozb

Trả lời

14

Kiến thức của tôi với mua InApp là từ thư viện phiên bản cũ hơn. Tôi đã không làm việc với v3 mới nhất. Tuy nhiên, hy vọng tôi vẫn có thể hữu ích.

Có sử dụng trọng tải của nhà phát triển làm tính năng bảo mật bổ sung chắc chắn sẽ giúp, tuy nhiên bạn có nên hay không chủ quan hơn sau đó là một sự pha loãng khách quan. Trong trường hợp của tôi, khách hàng của tôi đã có một máy chủ trong hỗn hợp kể từ khi khách hàng phải tải xuống 200MB tệp sau khi mua hàng inapp. Chúng tôi đã sử dụng tải trọng của nhà phát triển để lưu trữ thông tin về tệp được phép tải xuống. Thông tin này rất quan trọng khi nói cho ứng dụng biết cách xử lý các tệp đã tải xuống.

Chúng tôi vẫn cung cấp bảo mật bổ sung bằng cách ghi đè phương thức verifyPurchase() cục bộ bằng cuộc gọi máy chủ. IE, cung cấp nonce của chính chúng ta để kiểm tra. Làm điều đó tại địa phương không phải là rất an toàn.

Đối với trường hợp của bạn, tôi nói đó là vấn đề rủi ro so với chi phí. Rủi ro của ứng dụng của bạn bị tấn công là gì và khách hàng bỏ qua mua hàng so với chi phí thực hiện bảo mật bổ sung. Nếu ứng dụng của bạn đang được tải xuống hơn 100.000 lần thì bạn có một số lượng rủi ro hợp lý. Nếu hơn 1 triệu lần, thì có nguy cơ cao. Nếu chỉ một vài nghìn, thì vi phạm bản quyền có thể sẽ bỏ qua ứng dụng của bạn. Nếu bạn chọn bảo mật bổ sung, bạn cần thiết lập và chạy một máy chủ, sau đó thêm tất cả mã và bắt tay cần thiết cho Ứng dụng và máy chủ. Tất cả đều cần thời gian và tiền bạc. Đặc biệt là trong việc trả tiền cho một máy chủ trong suốt cuộc đời của ứng dụng của bạn.

+0

Vi phạm bản quyền trên Android là khá rife. Phiên bản vi phạm bản quyền của ứng dụng của tôi đã trực tuyến trong vòng vài tuần sau khi phát hành, khi vẫn còn dưới 1000 người dùng. Chỉ là FYI. – user3690202

Các vấn đề liên quan