12

Tôi đang làm việc trên một dịch vụ REST mà có một vài yêu cầu:ủy quyền REST của yêu cầu

  1. Nó phải được an toàn.
  2. Người dùng không được giả mạo yêu cầu.

giải pháp đề xuất hiện tại của tôi là phải có một tiêu đề tùy chỉnh Authorization mà trông như thế này (đây là cùng một cách mà các dịch vụ web amazon làm việc):

Authorization: MYAPI username:signature 

Câu hỏi của tôi là làm thế nào để tạo chữ ký . Khi người dùng đăng nhập vào dịch vụ, họ được cung cấp một khóa bí mật mà họ có thể sử dụng để ký yêu cầu. Điều này sẽ ngăn người dùng khác gửi yêu cầu thay mặt họ, nhưng sẽ không ngăn họ yêu cầu giả mạo.

Ứng dụng sẽ sử dụng dịch vụ này là ứng dụng iPhone, vì vậy tôi nghĩ chúng tôi có thể có khóa công khai được nhúng trong ứng dụng mà chúng tôi có thể làm chữ ký bổ sung, nhưng điều này có nghĩa là chúng tôi sẽ phải có hai chữ ký, một cho khóa người dùng và một cho khóa ứng dụng?

Bất kỳ lời khuyên nào sẽ được đánh giá rất nhiều, tôi rất muốn nhận được quyền này lần đầu tiên.

+0

Xác định "yêu cầu giả mạo". Thực thể nào tạo yêu cầu không giả mạo? Đó có phải là phần mềm phía máy khách không? – Alexander

Trả lời

1

Tôi nghĩ cách đơn giản nhất để làm điều này là sử dụng xác thực ứng dụng khách HTTPS. Trang web của Apple có một số thread về chủ đề này.

Chỉnh sửa: để xử lý ủy quyền, tôi sẽ tạo tài nguyên riêng biệt (URI) trên máy chủ cho mỗi người dùng và chỉ cho phép người dùng (được xác thực) đó thao tác tài nguyên này.

Chỉnh sửa (2014): Apple đã thay đổi phần mềm diễn đàn của họ trong sáu năm qua; chuỗi hiện tại là https://discussions.apple.com/thread/1643618

+0

Làm cách nào để người dùng ngừng yêu cầu giả mạo? – jonnii

+0

Xác thực ứng dụng khách HTTPS yêu cầu khách hàng phải có chứng chỉ khóa công khai hợp lệ. Trừ khi bạn có nghĩa là "yêu cầu giả mạo" mà một người dùng được xác thực bằng cách nào đó đang thực hiện các yêu cầu trái phép, đó là vấn đề ủy quyền chứ không phải vấn đề xác thực. –

+0

Đó là vấn đề tôi đang cố gắng giải quyết, tôi đã cập nhật chủ đề để phản ánh điều này. Bạn đề nghị cho phép yêu cầu hợp lệ như thế nào? – jonnii

2

Có gì sai với HTTP Digest Authentication?

+0

Trước hết tôi sẽ phải sử dụng SSL cho các yêu cầu (điều này là tốt), nhưng nó không ngăn người dùng đăng nhập vào API từ một thiết bị không phải iPhone và gửi các yêu cầu giả mạo. – jonnii

+0

Làm cách nào để họ có thể giả mạo yêu cầu thông qua xác thực thông báo? Làm thế nào họ có được giá trị nonce hiện tại và tạo ra một phản ứng tiêu hóa chấp nhận được? –

+0

Họ có thể giả mạo yêu cầu vì họ có thể tạo ứng dụng khách của bên thứ ba đăng nhập vào api, tại thời điểm đó họ có thể gửi yêu cầu của riêng họ. Tôi cần xác minh nguồn của yêu cầu api. – jonnii

8

Câu trả lời rất đơn giản: Nó không thể được thực hiện. Ngay sau khi bạn gửi bất kỳ giải pháp nào cho người dùng cuối, họ có thể tấn công máy chủ mà nó đang liên lạc. Phiên bản phổ biến nhất của vấn đề này là gian lận với danh sách điểm số cao trong trò chơi Flash. Bạn có thể làm cho nó khó khăn hơn bằng cách nhúng một số loại mã hóa trong máy khách và làm xáo trộn mã ... Nhưng tất cả các mã được biên dịch và làm xáo trộn đều có thể được giải mã và không bị làm mờ. Nó chỉ là vấn đề bao nhiêu thời gian và tiền bạc bạn sẵn sàng chi tiêu và tương tự như vậy cho kẻ tấn công tiềm năng.

Vì vậy, mối quan tâm của bạn là không cách cố gắng ngăn người dùng gửi dữ liệu bị lỗi đến hệ thống của bạn. Đó là cách ngăn người dùng khỏi bị làm hư hại hệ thống của bạn. Bạn phải thiết kế giao diện của bạn để tất cả các thiệt hại được thực hiện bởi dữ liệu bị lỗi chỉ ảnh hưởng đến người dùng gửi nó.

+0

Trong trường hợp này, chúng tôi sẽ triển khai vào iphone, do đó, có nguy cơ ai đó giải mã mã. Bạn tăng điểm rất hợp lệ trong bài đăng của mình về việc giới hạn khả năng chỉ làm hỏng dữ liệu của người dùng, trong trường hợp này họ có thể gian lận trong trò chơi, vì vậy chúng tôi cần có khả năng xác định gian lận và đối phó với họ một cách hiệu quả. Không có nhiệm vụ dễ dàng. – jonnii

+0

Cách duy nhất để bảo vệ trò chơi av là chạy hoàn toàn ön máy chủ và chỉ gửi hành động của người dùng qua dây. Những gì tôi thường làm là: 1. Làm cho gian lận khó khăn 2. Lưu càng nhiều thông tin càng tốt. Gian lận thường dễ dàng hợp lý để bạn có thể xóa tất cả các mục nhập cho người dùng đó sau đó. –

+0

Nếu bạn đang phát triển TRÒ CHƠI, và đây là một vấn đề LỚN, thì bạn có toàn bộ công cụ khác có sẵn cho bạn - tùy thuộc vào việc đó là trò chơi kỹ năng hay trò chơi may rủi. Nói chung, hiệu suất của người chơi có thể được đo lường các mẫu thống kê và kỳ lạ có thể được phát hiện - đó là cách mà nhiều hệ thống phát hiện gian lận hoạt động trong ngành giải trí. Một điều mà ngay lập tức đến với tâm trí là thiết kế thuật toán trong đó giới thiệu các thuộc tính đo lường nhất định cho trò chơi - ví dụ, tích lũy lỗi trong số điểm nổi. – mst

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