2011-12-03 62 views
32

Tôi có một trang web cho phép người dùng kiểm tra số liệu thống kê của họ (số lượng tệp được tải lên, số lượng tệp họ có, hạn ngạch, loại truy cập, v.v.)thực hiện bảo mật api php

Tôi tạo một phần trên trang web: api.domain.com

Điều này có thể truy cập thông qua curl hoặc một trình duyệt web kể từ khi tôi đang trở về một đối tượng jSON hoặc xml (tùy thuộc vào tùy chọn người dùng)

câu hỏi của tôi là thế này: tôi nên hạn chế truy cập bằng cách sử dụng một người dùng/pass hoặc tôi nên tạo một băm của tập tin người dùng?

ví dụ:

kịch bản 1:

Người dùng tạo ra một curl php mà gửi người dùng và pass qua đường bưu điện hoặc các curl auth và lấy lại kết quả, phân tích nó vv ...

Đối với tôi đây là an toàn nhưng người dùng phải duy trì kịch bản của mình nếu họ thay đổi đường chuyền của họ

kịch bản 2

Các người dùng truy cập một tập tin như: api.domain.com/j355HGssgf3HESAjh45jusf4325GSj5hbsHhdh5HGHFS3732he4548475wbe3447nSNe5XfgjhGJ và sau đó truy cập vào dữ liệu

một này, không có gì để duy trì

+0

1 rất tốt câu hỏi! –

Trả lời

40

Dưới đây là suy nghĩ của tôi về vấn đề này.

Nếu bạn trả lại trang không tìm thấy hoặc thông báo lỗi (với trạng thái 200 OK tốt) khi yêu cầu được thực hiện cho trang của bạn, nó có thể gửi đến các bot hoặc người đáng tin cậy, một đầu mối về những gì họ có thể nhận được và hãy thử lại một lần nữa ...

Mặt khác, nếu bạn gửi quyền truy cập bị từ chối, như 401, hoặc mã lỗi 500 tốt hơn để mô phỏng lỗi máy chủ, các bot này hoặc những người đáng tin cậy có thể đi cho tốt.

Tôi sẽ nói rằng phương pháp người dùng/mật khẩu an toàn hơn một chút trong trường hợp này.

Bây giờ, bạn có tin tưởng chỉ cần nhập một chuỗi lớn (như trường hợp 2) khi bạn kiểm tra thư của mình? hoặc thông tin tài khoản ngân hàng của bạn?

37

Nếu là tôi tôi sẽ cung cấp cho mỗi tài khoản khả năng tạo ra một chìa khóa api độc đáo,

api.domain.com/?key=<API.KEY> 

cho các biện pháp bảo mật hơn bạn có thể làm cho nó chỉ chấp nhận kết nối qua đường bưu phương pháp với phím api. Nếu tiếp xúc qua get sau đó hiển thị một lỗi, vv

Sau đó, nếu họ thay đổi đường chuyền của họ/tên người dùng nó sẽ không ảnh hưởng api của họ chính

+0

Nhưng nếu ai đó lấy trộm khóa api của bạn thì sao? Tôi đang tìm kiếm một số thông tin về lập luận này bởi vì tôi có 2 máy chủ và tôi muốn comunicate thông qua POST một số thông tin hợp lý. Nhưng tôi không hiểu, tôi ca sử dụng một API để lấy thông tin, nhưng nếu ai đó đánh hơi cuộc gọi có thể lấy thông tin hợp lý với khóa api – Kreker

+1

Nếu đó là thông tin nhạy cảm, tôi sẽ sử dụng ssl và mã hóa dữ liệu, giải mã trên kết cục khác. Nếu bạn biết một khóa api đã bị đánh cắp tái tạo một cái mới :) –

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