2009-08-18 36 views
7

Tôi cần tạo UUID để lưu trữ trong cơ sở dữ liệu. Tôi có thể tạo ra các câu hỏi UUID từ Javascript trên trình duyệt của khách hàng (There are some examples here) không?Có nguy hiểm nào khi tạo UUID ở phía máy khách Javascript không?

Có rủi ro bảo mật nào khi thực hiện theo cách này không? Tôi hiểu rằng bất cứ ai cũng có thể sửa đổi UUID trước khi nó được chuyển đến máy chủ để lưu trữ. Vì vậy, tôi sẽ cần phải kiểm tra xem họ là trully độc đáo trước khi lưu trữ chúng trong cơ sở dữ liệu, nhưng khác hơn thế, là có bất kỳ những thứ khác để kiểm tra?

(Xin lỗi vì tiếng anh của tôi, cảm thấy tự do để sửa bất kỳ lỗi ngữ pháp)

chỉnh sửa: Để trả lời câu hỏi về việc tại sao tôi muốn làm điều này, đó là bởi vì tôi có thể tạo ra một đối tượng mới và nó nhận dạng trong Javascript và thêm nó vào quan điểm của tôi và sau đó thực hiện một cuộc gọi AJAX đến máy chủ để thêm nó vào cơ sở dữ liệu. Bằng cách này, tôi không cần phải tải nó trở lại từ cơ sở dữ liệu để biết định danh chính của nó là gì.

+0

Tôi nghĩ rằng đó có thể là vấn đề bảo mật khi cho phép người dùng thấy mã trình tạo UUID của bạn. Về lý thuyết, sau đó có thể tạo ra UUID hiện có của các cá thể người dùng phiên id khác và như vậy. –

Trả lời

9

Không thực sự. Miễn là nó là một định danh đơn giản và không có gì nhiều hơn, và bạn thực sự kiểm tra nó cho tính hợp lệ và tính duy nhất, nó không khác với tài khoản người dùng có một id trong url, ví dụ.

Nhìn vào thanh URL của bạn. Tôi đặt cược 1296234 là khóa chính của câu hỏi này, nhưng tôi không thể thực sự làm bất cứ điều gì với thông tin đó. Tương tự với kịch bản của bạn.

+0

Cảm ơn. Tôi đã không nghĩ bất cứ điều gì sai có thể xảy ra, nhưng tôi muốn chắc chắn rằng tôi đã không nhìn thấy một số loại tấn công cũng biết. –

3

Bạn thấy lợi ích gì khi tạo các mặt hàng này? Trong tất cả sự trung thực, lựa chọn tốt nhất là tạo ra nó phía máy chủ, ngoài tầm với của người dùng. Nó có thể không tiết kiệm cho bạn từ bất kỳ vấn đề bảo mật nghiêm trọng nào, nhưng nó sẽ cắt giảm việc xác thực dư thừa.

+0

Tôi biết chủ đề này là cũ nhưng tạo ID trên máy khách là cần thiết nếu bạn đang sử dụng hoàn toàn idempotent tạo các cuộc gọi REST. Một lựa chọn khác là truy vấn máy chủ cho một ID mới và sau đó sử dụng ID đó trong cuộc gọi tạo REST. Tuy nhiên điều đó có nghĩa là hai cuộc gọi đến máy chủ. – Alkaline

+1

@Sampson Tôi chưa bao giờ nghĩ mình phải tạo UUID ở phía máy khách nhưng bây giờ, tôi quan tâm đến ứng dụng web ngoại tuyến và có UUID được tạo ở phía máy khách là hoàn hảo cho trường hợp sử dụng này! – Maxime

+0

Nếu bạn đang theo dõi CQS nghiêm ngặt và bạn cần có ID ngay (ví dụ: để chuyển hướng đến một chế độ xem thích hợp), đó là cách hay để làm như vậy. – Shocked

3

Có lý do nào khiến bạn không thể tạo ID (tăng) cho cơ sở dữ liệu không?

Nếu, như bạn nói, bạn sẽ phải kiểm tra tính duy nhất của giá trị trước khi gửi đi, tại sao không chỉ có bất kỳ ngôn ngữ phụ trợ nào bạn đang sử dụng tạo ra nó. Điều đó sẽ làm cho nó mờ đục hơn nhiều.

+2

Lưu ý phụ ở đây cho người xem trong tương lai: ngừng dựa vào ID được tạo tự động. Tự tách mình khỏi cơ sở dữ liệu và sử dụng UUID thay vì –

2

Có. Rủi ro không dành riêng cho UUID, bất kỳ ID được tạo phía máy khách nào cũng có một số rủi ro, tùy thuộc vào những gì bạn làm với ID. Vấn đề là rất khó để xác thực Javascript. Nếu bạn chấp nhận ID do khách hàng tạo, bạn chấp nhận bất kỳ ID nào từ các tin tặc.

Những rủi ro có thể bao gồm,

  1. phiên trộm cắp. Nếu bạn sử dụng ID để xác định phiên, ai đó có thể sử dụng ID hiện tại làm ID được tạo và máy chủ có thể coi ID đó là phiên hiện tại nếu việc chăm sóc thích hợp không thực hiện.

  2. Khóa trùng lặp. True UUID là ngẫu nhiên nhưng ai đó có thể tạo các khóa trùng lặp sẽ làm hỏng cơ sở dữ liệu của bạn.

Bạn có thể tìm cách bảo vệ chống lại từng cuộc tấn công nhưng đó là bảo vệ thụ động. Nó có thể đánh bại mục đích ban đầu của việc tạo ID trên máy khách, điều này rất đơn giản.

+0

Nếu bạn xác định id phiên thì bạn bị tấn công trên bất kỳ trang web nào .. điểm 1 không phải là điểm hợp lệ. –

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