2012-10-16 10 views
7

Tôi đang có một thời gian khó khăn để tìm ra điều này. Đã dành khoảng 4 giờ thu thập dữ liệu trang web không có bài đăng SO để cứu tôi.Làm cách nào để cập nhật một cơ sở dữ liệu từ xa một cách an toàn từ bên trong tiện ích chrome?

Hãy tưởng tượng một kịch bản:

  1. Tôi đã viết một phần mở rộng chrome, để chụp một số hành động đặc biệt trên trang web (chủ yếu là một nút bấm). Hành động đó kích hoạt chức năng, nắm bắt thông tin về nút và thông tin người dùng (tất cả hiện diện trên trang) và hiển thị nó

  2. Bây giờ tôi muốn plugin có thể cập nhật điều này thành thiết lập cơ sở dữ liệu trên điều khiển từ xa máy chủ.

Vì tôi thông thạo PHP (và do đó MySQL là lựa chọn tốt), tôi đang tìm giải pháp để đảm bảo rằng các bản cập nhật được thực hiện CHỈ VÀ CHỈ từ tiện ích.

Đối với điều này, tôi nghĩ tùy chọn tốt nhất là chạy một yêu cầu GET/POST như http://remoteserver.tld/update-db.php?id=XXXX&action=YYYYY&foo=bar .... v.v ... Nhưng điều gì sẽ xảy ra nếu người dùng mở/chuyển bài đăng lên url này bên ngoài plugin?

Dữ liệu sẽ vẫn được cập nhật và tính toàn vẹn sẽ bị mất!

Ý tưởng tốt nhất tiếp theo là bao gồm các phím có yêu cầu, nhưng một lần nữa các phần mở rộng được viết bằng JS, hầu hết mọi người đều có thể đánh hơi các phím.

Hướng dẫn tôi phương pháp tốt nhất để cập nhật cơ sở dữ liệu trên máy chủ từ xa và đảm bảo hành động được xác thực.

Chúc mừng!

+5

bất kỳ ai cũng có thể đánh hơi các phím và bất kỳ ai cũng có thể đánh hơi phần mở rộng của tiện ích. bảo mật hoàn hảo về cơ bản là không thể. chọn ra một mức độ rủi ro mà bạn sẵn sàng làm việc và bảo mật mọi thứ cho đến thời điểm đó, không có thêm –

+0

Đó là sự thật ... nhưng sẽ có cách mà tôi có thể kết thúc với máy chủ, kiểm tra xem yêu cầu cập nhật cơ sở dữ liệu là từ các plugin, hoặc là nó từ một trang giả mạo? ... những lựa chọn nào bạn nghĩ rằng tôi có @ MarcB? ... những gì sẽ có được của bạn tại này? ... nhớ nó cần phải được nhanh chóng càng tốt ... bởi vì sẽ có 100 người dùng làm việc trên mạng nội bộ cập nhật máy chủ ... – whizzzkid

+0

giả sử tôi đang làm việc cho một trong những người tiên phong về công nghệ và cần một phương pháp vững chắc để bảo vệ sự giả mạo trên dữ liệu này ... bởi vì Tôi tin rằng các nerds ở đây sẽ cố gắng và hack dữ liệu này để tốt nhất của họ ... nhờ ý tưởng của bạn @MarcB – whizzzkid

Trả lời

2

Vấn đề ở đây là một trong những xác thực về cơ bản, bạn muốn ngăn chặn bất kỳ ai có thể cập nhật kho dữ liệu của bất kỳ ai.

Sửa lỗi rõ ràng nhất là gửi một tham số bổ sung khó liệt kê (băm là một ví dụ tốt) và được chỉ định cho một cá thể mở rộng duy nhất của bạn (vì vậy mỗi người dùng tạo băm xác thực của riêng nó) .

Để hàm băm này có hiệu quả, điều quan trọng là không thể đoán được. Không tạo băm chỉ dựa trên các công cụ tĩnh như ip-adressess hoặc chuỗi tác nhân người dùng.

Bạn có thể bao gồm các chuỗi tĩnh này để làm cho các va chạm ít có khả năng tho: [giả] sha1 (ip_address + user_agent + random_integer). Vì vậy, về cơ bản cho bạn điều này kết thúc trong những điều sau đây: để cho phần mở rộng tạo ra một băm cho trường hợp hiện tại nếu nó chạy lần đầu tiên, thực hiện một yêu cầu ban đầu cho máy chủ của bạn để 'đăng ký' dụ mới này, tất cả các yêu cầu tiếp theo có băm này sẽ xác thực cho cá thể đó.

cũng, sử dụng kết nối được mã hóa SSL để ngăn chặn đánh hơi.

Vui lòng không giải quyết vấn đề này với bảo mật thông qua sự tối tăm như XORing khắp nơi, mọi người sẽ tìm hiểu.

Ồ và btw, nếu bạn đang gặp sự cố về chính toàn vẹn dữ liệu, bạn không thể khắc phục điều đó.Dữ liệu được gửi luôn được người dùng cung cấp vì mọi thứ mà máy tính thực hiện dưới sự kiểm soát của người dùng đó (giả định).

+0

cảm ơn @garuda: trước khi viết bài đăng tôi đã có trong tâm trí. Nhưng vấn đề là ít hơn hoặc ít hơn: Cho phép nói để cập nhật db tôi gửi dữ liệu từ xa như http: // remote/update /? data = nhưng nếu plugin không được cập nhật, mọi người đều có thể chạy bằng trình duyệt để Thêm vào db, hoặc chạy một kịch bản lệnh shell để nhân các bản ghi này – whizzzkid

+0

Điều tôi đã lên kế hoạch ban đầu là: người dùng cập nhật dữ liệu vào cơ sở dữ liệu, và trang cập nhật trả về mã băm id, vì vậy lần sau cập nhật plugin, nó chỉ có thể cập nhật nếu nó chỉ chứa băm đó và được tạo lại ở mọi truy vấn! – whizzzkid