2013-05-26 48 views
9

Tôi muốn viết tiện ích mở rộng của google chrome, yêu cầu trang web của tôi gửi và nhận một số dữ liệu, vì vậy, tôi thực sự yêu cầu ajax như được viết ở đây https://developer.chrome.com/extensions/xhr.htmlbảo mật mã trong tiện ích mở rộng google chrome

var xhr = new XMLHttpRequest(); 
xhr.open("GET", "http://api.example.com/data.json", true); 

Tôi muốn hỏi nếu có cách nào đó bảo mật mã hoặc ngăn người khác sử dụng api của tôi, vì thực sự người dùng khác có thể thấy mã nguồn của tiện ích mở rộng khi họ cài đặt và sử dụng api của tôi tôi nhận thức được điều đó.

EDIT:

Nếu tôi cần phải thực hiện một số loại chứng thực, so với làm thế nào tôi có thể xác thực người dùng trước khi thực hiện cuộc gọi ajax? để xác thực, tôi sẽ cần phải gửi yêu cầu tới máy chủ của tôi, nhưng tôi phải gửi yêu cầu đó, ví dụ: tên người dùng và mật khẩu, sẽ được lưu ở đâu đó trong các tệp của tiện ích mở rộng, mà trên thực tế, người dùng có thể nhìn thấy khi họ cài đặt tiện ích.

Cảm ơn

+0

Bạn hiển thị api công khai trong tiện ích mở rộng chrome - và bạn không muốn người dùng khác của tiện ích mở rộng sử dụng tiện ích đó? Ý nghĩa của api là gì? – madflow

+1

bạn có thể xác định người dùng của mình bằng cách sử dụng api xác thực google chrome và lưu trữ một số nội dung trên mặt của bạn để đảm bảo người dùng có quyền. Xem tài liệu google này; http://developer.chrome.com/apps/app_identity.html – happy

+1

@madflow, nếu tôi muốn api của mình chỉ được sử dụng bởi những người được ủy quyền, không có ý nghĩa gì trong đó? – dav

Trả lời

3

Đừng tin tưởng trình duyệt, hãy thực hiện các bước để xác thực người dùng thay thế. Vì vậy, trong trường hợp này, bạn có thể yêu cầu bạn nhập vào một mật khẩu được sử dụng để giao tiếp với máy chủ của bạn.

Tiện ích Google của bạn sẽ đơn giản yêu cầu bạn nhập mật khẩu trước khi nó cố gắng sử dụng AJAX để liên lạc với máy chủ của bạn.

Hãy lưu ý rằng bạn nên xây dựng bằng phương tiện bảo vệ bản thân khỏi các cuộc tấn công bạo lực. Vì vậy, hãy làm những việc như khóa mọi thứ xuống nếu có nhiều hơn một số mật khẩu sai, v.v.

Bạn cũng có thể xem xét sử dụng mật khẩu để giải mã đích đến của XHR, nhưng nếu bạn đi tuyến đường này, bạn nên lưu trữ này rất cẩn thận, bởi vì điều này sẽ được brute-buộc phải ẩn.

EDIT Đang cố gắng để khóa xuống một API để chỉ một ứng dụng duy nhất có thể sử dụng nó chỉ là không thực tế cũng không thể về mặt kỹ thuật, vì vậy bạn chỉ có hy vọng để làm điều này là để xác thực người dùng bằng cách sử dụng API, không phân biệt của phần mềm truy cập anh đang sử dụng. Bạn có thể yêu cầu người dùng ký một thỏa thuận giới hạn hợp pháp họ chỉ với phần mở rộng của bạn, nhưng tôi nghi ngờ điều này sẽ phần lớn không thể thực hiện được và sẽ tiêu tốn thời gian của bạn theo dõi những kẻ lạm dụng.

Nếu bạn không muốn những người không được phép biết ngay cả API, bạn có thể thực hiện xác thực bằng cơ chế ngoài băng tần: qua điện thoại, email, SMS hoặc đơn giản, một API khác sẽ cấp cho người dùng mật khẩu hoặc mã thông báo yêu cầu API của bạn phải đi kèm.

Trong quá trình ngoài băng này, bạn cũng có thể cấp cho người dùng, một URI duy nhất (điểm truy cập API) chỉ hợp lệ cho mỗi phiên được xác thực (ví dụ: https://api.totally-cool-extension.com/api/ijyeDvB5dYvSiWG97OLuTAoNWwbhuZ0/). Mọi yêu cầu đối với máy chủ của bạn trên các URI KHÁC chỉ đơn giản là không hoạt động. Tuy nhiên, điều này không khác biệt về mặt lý thuyết so với việc sử dụng cùng một điểm truy cập API và có mật khẩu tốt. Nó chỉ thay đổi số lượng địa điểm trong kiến ​​trúc của bạn sẽ thực hiện kiểm tra xác thực và/hoặc ủy quyền.

<aside> Bỏ phiếu của tôi sẽ giảm số lượng điểm ủy quyền/xác thực càng ít càng tốt để bạn có thể dành nhiều thời gian hơn để nhận một địa điểm đó đúng hơn là có nhiều địa điểm và có thể có nhiều lỗi logic hoặc những thứ khác có thể dẫn đến lỗ hổng bảo mật. </aside>

Bạn cũng có thể khám phá bằng cách sử dụng cơ sở hạ tầng khóa công khai và/hoặc chương trình mật khẩu một lần hoặc máy phát thẻ mã thông báo trên thiết bị, v.v. Và, nhờ vào Internet, điều này sẽ không còn là một URI không được tiết lộ lâu nữa.

Và quan trọng hơn, nó sẽ không ngăn người khác sử dụng dữ liệu. Ngay cả với tất cả các biện pháp này tại chỗ, nó sẽ là tầm thường đối với người dùng được ủy quyền để thu thập dữ liệu này khi dữ liệu đang được truyền đến tiện ích mở rộng của bạn. Hoặc, nếu bạn sử dụng mã hóa điểm-điểm, họ có thể sàng lọc màn hình hoặc sử dụng một số hình thức nội tâm JS trên chính mã của bạn hoặc thậm chí trích xuất dữ liệu từ bộ nhớ máy tính của họ.

Tôi biết bạn đang tìm kiếm một viên đạn bạc ở đây, nhưng nó không tồn tại.

+0

nhưng làm thế nào tôi có thể xác thực người dùng trước khi thực hiện cuộc gọi ajax? để xác thực tôi sẽ cần phải gửi một yêu cầu đến máy chủ của tôi, phải không? nhưng vì điều đó tôi nên gửi, ví dụ tên người dùng và mật khẩu, cần được lưu ở đâu đó trong tệp của tiện ích mở rộng, thực tế, người dùng có thể nhìn thấy, khi họ cài đặt tiện ích, phải không? – dav

+0

Cập nhật câu trả lời để giải quyết câu hỏi đó. – mkoistinen

+0

Cảm ơn @mkoistinen, và bạn nói đúng, tôi đang tìm kiếm một viên đạn bạc, Cảm ơn! – dav

2

Tôi nghĩ bạn đang làm sai. Bạn không bao giờ nên tin tưởng những gì đang xảy ra trên máy tính của người dùng internet. Không bao giờ!

Di chuyển dòng tin cậy một bước vào bên trong, đặt API của bạn ở chế độ công khai và sau đó thiết kế bảo mật nơi bạn có quyền kiểm soát hoàn hảo - phía máy chủ.

+0

nhưng nếu api là công khai để mọi người có thể gửi và nhận dữ liệu, làm cách nào để bảo mật nó ở phía máy chủ? Tôi muốn chắc chắn rằng chỉ những người có thể sử dụng api người, nói, có một chìa khóa, nhưng nếu tôi đặt một chìa khóa trong phần mở rộng, nó có thể nhìn thấy và không an toàn, Cảm ơn! – dav

1

tôi không thể có được khía cạnh đúng đắn về trường hợp sử dụng của bạn

Ít điểm:

  • đang mở rộng của bạn là always theo dõi (Bất kỳ ai đã cài đặt phần mở rộng có thể xem mã)
  • Nếu bạn đang tìm kiếm bảo mật thông qua complicated or obfuscated coding patterns bạn sẽ bị chậm lại trong quá trình hiểu không phải là toàn bộ.
  • Nếu mục tiêu của bạn là để đảm bảo người dùng cài đặt tiện ích của bạn có thể truy cập và trơ tất cả người dùng khác (Ai đã truy cập trái phép hoặc mã được tải xuống và chỉnh sửa) có khóa chia sẻ phiên mỗi lần cài đặt.

Vui lòng giải thích trường hợp sử dụng thêm để tôi có thể giúp bạn tốt hơn.

+0

Mục tiêu của tôi là đảm bảo rằng sau khi tạo tiện ích mở rộng, không ai có thể xem mã của tôi bằng cách nào đó có thể đưa ra yêu cầu từ một số trang web khác đến trang web của tôi hoặc tạo tiện ích mở rộng khác như vậy và sử dụng trang web, bình luận của tôi có ý nghĩa không?Cảm ơn – dav

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