2009-09-01 27 views
43

Tôi đã nhận được khóa API Google Maps cho miền của mình.Tôi nên thực hiện các bước nào để bảo vệ Khóa API Google Maps của mình?

Các ví dụ được cung cấp khi tôi đắc chìa khóa của tôi hiển thị phím nhúng trong thông số yêu cầu, ví dụ:

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=true_or_false&amp;key=my-key" type="text/javascript"></script> 

Tôi đánh giá cao rằng trường giới thiệu trong các yêu cầu phải phù hợp với tên miền của tôi, nó là an toàn để làm chìa khóa của tôi có thể nhìn thấy trong các thẻ script và tương tự? Hoặc tôi có nên thực hiện các bước nào khác không?

Trả lời

49

Xét rằng chìa khóa phải được bao gồm trong <script> thẻ của trang HTML của bạn, để tải các tập tin JS/dữ liệu từ máy chủ của google, không có gì bạn có thể làm là:

  • bạn phải đặt nó trong bạn Tệp HTML
  • mọi người đều có thể xem chúng.

Tuy nhiên, điều này không quan trọng: nếu có ai đó sử dụng khóa này trên tên miền khác với tên miền của bạn, họ sẽ nhận được cảnh báo Javascript - điều này không tốt cho người dùng đó.

Vì vậy:

  • Không có gì bạn có thể làm là; đây là cách nó hoạt động
  • Và không có nhiều bạn nên lo lắng, tôi muốn nói.
+3

Tôi nghĩ bạn có thể sử dụng proxy trên trang web của riêng bạn đã sử dụng khóa để tìm nạp tệp "thực". Hoàn toàn vô nghĩa, vâng, nhưng tôi nghĩ là có thể. –

+1

Đã tìm thấy nó đáng để kiểm tra trong trường hợp tôi đã bỏ lỡ điều gì đó. Chúc mừng những người trả lời. – Brabster

+0

@Tim: không chắc chắn; Tôi đoán mã JS chính nó nếu whecking tên miền của trang web hiển thị bản đồ, và nó sẽ có vẻ bình thường mà nó so sánh nó, trong một số loại cách, với một thông tin bao gồm trong khóa - vẫn còn, tôi đã làm không thử. ;;; @Brabster: :-) –

3

Tôi không hiểu tại sao bạn sẽ bận tâm. Không phải chìa khóa chỉ hợp lệ từ miền của bạn? IIRC, thông tin duy nhất được mã hóa trong đó là tên miền của bạn, ngoài bất kỳ thông tin nào mà Google có thể thêm vào như thời gian được tạo.

7

Có cài đặt trên bảng điều khiển API của Google có thể bảo vệ việc sử dụng băng thông API của bạn không được sử dụng với tên miền/người dùng khác. Bạn có thể hạn chế và bảo vệ điều đó bằng cách sử dụng liên kết giới thiệu trên bảng điều khiển API. Khóa API sẽ từ chối yêu cầu mà không có liên kết giới thiệu khớp với các hạn chế của bạn.

Đây là ảnh chụp màn hình từ Google cho API Key mà Google chỉ có thể sử dụng cho Google hai miền của nó. enter image description here

10

Mặc dù câu hỏi này là một vài năm nhưng đây là câu hỏi rất hay. Khi tôi hiểu nó đang lộ ra các khóa API, ngay cả khi chúng là tên miền phù hợp, vẫn có thể dẫn đến lạm dụng. Có một bài đăng trên Security Stack Exchange ở đây bao gồm chi tiết hơn.

Các bước mà bạn có thể làm để tránh lạm dụng tiềm năng đã được công bố bởi Google tại đây:

thực hành tốt nhất Hướng dẫn an toàn sử dụng API: https://support.google.com/cloud/answer/6310037?hl=en

Mặc dù tôi sẽ khuyên bạn nên dùng tất cả của nó trên hội đồng quản trị, có một cách tiếp cận mà sẽ đối phó với các ví dụ cụ thể đã được đăng bởi Brabster và đó là để lưu trữ các khóa trong một biến môi trường . Bằng cách này, tất cả những gì bạn cần làm là thay thế khóa cho biến phía máy chủ được lưu trữ trong dự án của bạn. Tuy nhiên, hãy đảm bảo không cam kết tệp lưu trữ khóa vào kho lưu trữ công khai.

+0

Và cách bạn sử dụng biến môi trường trên câu hỏi gốc (Javascript thuần túy) ?? –

+0

Vì biến môi trường là biến phía máy chủ, bạn có thể sử dụng JavaScript để đặt biến bằng cách sử dụng node.js. Có một hướng dẫn ngắn về kỹ thuật này tại đây: https://hackernoon.com/how-to-use-environment-variables-keep-your-secret-keys-safe-secure-8b1a7877d69c. Để thực hiện tác phẩm này với câu hỏi ban đầu, thẻ script sẽ phải được tạo động hoặc yêu cầu được thực hiện trong một hàm. – rjbultitude

+0

Tôi cũng cảm thấy rằng câu trả lời này không giải quyết được câu hỏi. API bản đồ yêu cầu javascript bên trình duyệt, luôn có thể đọc được bởi bất kỳ ai tìm nạp trang. –

1

Bạn nên sử dụng mặt sau/phía máy chủ để bảo vệ và xử lý khóa.Trong trường hợp của tôi, tôi sử dụng Django f/w phía máy chủ có thể phục vụ một cuộc gọi ajax để lấy chìa khóa từ máy chủ script/db sau đó vượt qua nó lên google api.

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