2013-12-12 18 views
5

Tôi đang viết một ứng dụng web thực hiện mã hóa dữ liệu phía máy khách để đảm bảo rằng tôi không bao giờ thấy những gì khách hàng đang gửi đến máy chủ của tôi. Điều tôi thực sự lo lắng là nếu một bên thứ ba truy cập vào mã JavaScript của tôi và sau đó thêm một cửa sau hoặc một số mã độc hại khác vào tệp JavaScript của tôi.Đảm bảo JavaScript đã không bị làm giả với

Vì JavaScript thường được lưu trữ trên CDN của bên thứ ba, làm cách nào để đảm bảo rằng tệp JavaScript không bị thay đổi hoặc giả mạo trước khi trình duyệt tải xuống? Tôi muốn có một thông báo bảo mật lớn trên trang của tôi hơn là tải một số giả mạo JavaScript trong trình duyệt của khách hàng của tôi.

Trong chương trình bình thường, tôi sẽ ký tên tệp để đảm bảo rằng nó không bị giả mạo nhưng tôi không nghĩ rằng trình duyệt hỗ trợ kiểm tra chữ ký đã cho trước khi tải xuống và/hoặc tải tệp JavaScript. Phải có một số giải pháp cho điều này nếu không lưu trữ bất kỳ tập tin trên một CDN sẽ là một nguy cơ bảo mật rất lớn. SSL chỉ bảo vệ tệp trong khi vận chuyển, không phải khi nó đang nằm trên máy chủ CDN.

+1

Giống như nếu CDN của bạn bị tấn công? – Mathletics

+0

@Mathletics Yep. Hoặc một nhân viên rogue tại nhà cung cấp CDN quyết định có một chút "vui vẻ". – Cromulent

+0

Trong cả hai trường hợp, bạn cần tìm một CDN mới. – Mathletics

Trả lời

1

Trừ khi tập lệnh động, bạn có thể lưu trữ các băm của chúng trong cơ sở dữ liệu và so sánh phía máy khách. Xem http://pajhome.org.uk/crypt/md5/

+0

Điều gì sẽ xảy ra nếu mã JavaScript bạn đang sử dụng để xác thực băm MD5 đã bị giả mạo? Không tin gì cả. – Cromulent

+0

@Tuyệt vời nếu họ giả mạo bằng cách chống giả mạo của bạn, bạn đã được xếp hạng cao hơn. Cung cấp trực tiếp các tệp của bạn. Nhận POP của riêng bạn, kéo chất xơ cho họ. TRUST NOTHING. – Mathletics

+2

Phục vụ thư viện xác nhận trực tiếp (như trong JS được nhúng). – rishta

3

Nếu bạn muốn đảm bảo rằng chúng không được thay đổi và không tin cậy bất kỳ CDN của bên thứ ba nào, bạn sẽ cần phân phối nội dung JavaScript trực tiếp từ máy chủ nguồn của bạn qua HTTPS.

So sánh các băm (theo câu trả lời là @rishta's) có nghĩa là bạn phải lưu trữ JavaScript để thực hiện điều này (trong trang của bạn hoặc trong các tệp .js riêng biệt được phục vụ từ máy chủ của bạn) để bạn có thể đơn giản phục vụ mã hóa phía máy khách mã từ máy chủ của bạn thay vì có thể có nghĩa là tổng chi phí thấp hơn tổng thể.

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