2010-07-07 17 views
5

Tôi có một trang với các thuộc tính riêng đang lưu trữ một đối tượng thẻ tín dụng và một đối tượng giỏ mua hàng trong viewstate vì vậy tôi có thể duy trì một tham chiếu đến chúng trên các postback. Nhân tiện, trang liên quan sẽ sử dụng SSL.Có an toàn để lưu trữ thông tin thẻ tín dụng và giá cả trong ViewState ngay cả trên ssl không?

Điều này có an toàn không?

+0

Tôi sẽ không khuyên bạn nên sử dụng nó. Ngay cả khi bảo mật được bật, bạn càng truyền dữ liệu qua lại từ máy khách đến máy chủ thì càng có nhiều cơ hội cho kẻ tấn công lấy nó. – rossisdead

+0

Cảm ơn bạn đã phản hồi nhanh.Tôi cũng không cảm thấy an toàn về điều đó. Thay vì giữ dữ liệu thẻ, tôi chỉ xử lý nó ngay lập tức. Cảm ơn! – Mike

+0

http://stackoverflow.com/questions/1049159/asp-net-1-1-viewstate-security – PRR

Trả lời

10

Tôi sẽ không lưu trữ thông tin nhạy cảm trong chế độ xem ... bao giờ. Bằng cách đó, bạn sẽ ủy quyền bảo mật cho việc triển khai trình duyệt để bảo vệ dữ liệu của khách hàng. Các lỗ hổng như kịch bản cross-site scripting (XSS), các cuộc tấn công chuyển hướng URL, và như vậy có thể phơi bày dữ liệu nhạy cảm này để xâm nhập, trộm cắp hoặc giả mạo.

Nếu bạn đang lưu trữ các chi tiết đó qua đăng lại, bạn nên đánh giá lại thiết kế của mình - và tìm cách tránh làm như vậy.

+0

Tôi đồng ý với câu trả lời của bạn, nhưng tôi có thể chỉ ra nếu bạn mã hóa chính xác dữ liệu nhạy cảm của bạn (ví dụ: thông tin CC) và đẩy nó vào viewstate, bạn được an toàn khỏi bị lạm dụng. Đôi khi nó sẽ không làm tổn thương đôi khi thay đổi khóa mã hóa của bạn, trong trường hợp ai đó đang cố gắng tấn công mã hóa của bạn (dữ liệu được mã hóa nhiều hơn họ thấy, cuối cùng họ có thể nhận được khóa mã hóa). – TravisO

0

Tôi sẽ nói chắc chắn là không, Nếu bạn cần lưu trữ chi tiết thẻ tín dụng trên nhiều yêu cầu Http tôi có thể sẽ có suy nghĩ về kiến ​​trúc của bạn.

Hy vọng điều này sẽ hữu ích.

2

Viewstate có thể bị tấn công. Nếu bạn cần lưu trữ thông tin đó qua đăng lại, hãy xem lưu trữ thông tin đó trong cơ sở dữ liệu được mã hóa.

EDIT (đối với cử tri xuống):

Q10. ViewState có được bảo mật theo mặc định không? Nó có thể được bảo đảm không? Làm sao?

Theo mặc định, giá trị của trường biểu mẫu ẩn __VIEWSTATE được mã hóa Base64 và không được mã hóa. Do đó, theo dữ liệu mặc định trong ViewState không an toàn.

Có, dữ liệu trong ViewState có thể được bảo mật. Có hai điều có thể được thực hiện. Đầu tiên là sử dụng SSL. Thứ hai là để đảm bảo rằng EnableViewStateMac được đặt thành true. Điều này sẽ đảm bảo rằng ViewState sẽ được mã hóa và cũng được kiểm tra chống giả mạo. Thuật toán mã hóa mặc định là SHA1 nhưng có thể thay đổi thành MD5 hoặc 3DES nếu muốn. Điều đó nói rằng, một trong những nên nhớ rằng có hầu như luôn luôn là một sự cân bằng giữa tăng cường an ninh và hiệu suất. Tốt nhất là tránh lưu trữ dữ liệu nhạy cảm trong ViewState và phát sinh các hình phạt về hiệu suất do nhu cầu tăng cường bảo mật.

page link

Hãy nhớ rằng bất cứ điều gì chứa đựng trong ViewState đang được chuyển giao cho các trình duyệt khách hàng (chỉ cần lưu trữ trong một nhập ẩn), và đã được thông qua qua lại từ client tới server. Mã hóa và giải mã dữ liệu có thể là một chi phí hệ thống rất lớn.

+0

Làm cách nào để hack? Có một liên kết? – EMP

+0

chế độ xem mặc định không được mã hóa. mã hóa bổ sung thêm chi phí đáng kể, và thậm chí vẫn còn, là đi qua chi tiết thẻ tín dụng nhạy cảm qua lại giữa khách hàng và máy chủ. Tôi đã không nói ViewState là không an toàn, tôi nói nó hackABLE ... có nghĩa là có, nó có thể bị tấn công nếu các biện pháp an ninh thích hợp không được đưa ra. Nó không phải là một cách hiệu quả/hiệu quả để thực hiện các nhiệm vụ cần thiết. –

+0

Chỉ vì nó có thể đọc được không có nghĩa là nó có thể tấn công. Không thể thay đổi nội dung trừ khi bạn đặt MAC tắt, được bật theo mặc định. – blowdart

0

Tất cả các câu trả lời khác dường như ngụ ý rằng ViewState hoàn toàn không an toàn. Tôi không đồng ý với điều đó.

ASP.NET có thể mã hóa ViewState bằng khóa của máy chủ. Nếu bạn làm điều đó thì trong lý thuyết nó phải đủ an toàn. Có nói rằng, tôi vẫn không khuyên bạn nên nó. Một người khác sẽ đến cùng một ngày và vô hiệu hóa mã hóa "cho mục đích thử nghiệm" hoặc đặt khóa yếu hoặc tệp cấu hình của máy chủ sẽ bị xâm phạm bằng cách nào đó và đột nhiên số thẻ tín dụng của bạn dễ bị tổn thương.

Vì vậy, có, có biện pháp bảo mật ở chế độ xem, nhưng vẫn còn cách tốt hơn để thực hiện việc này.Thậm chí lưu trữ dữ liệu nhạy cảm trong phiên của người dùng sẽ tốt hơn và khá đơn giản để thực hiện.

+0

câu trả lời nào khác nói rằng "hoàn toàn không an toàn"? –

+0

OK, "ngụ ý", không phải "nói". :) – EMP

0

vài điểm

  • MSDN: (Session vs ViewState) Trong khi các dữ liệu ViewState được mã hóa, và tùy chọn có thể được mã hóa, dữ liệu của bạn được an toàn nhất nếu nó không bao giờ là gửi cho khách hàng. Vì vậy, trạng thái phiên là một tùy chọn an toàn hơn. (Lưu trữ dữ liệu trong cơ sở dữ liệu thậm chí còn an toàn hơn do thông tin đăng nhập cơ sở dữ liệu bổ sung. Bạn có thể thêm SSL để bảo mật liên kết tốt hơn.) Nhưng nếu bạn đã hiển thịdữ liệu cá nhân trong giao diện người dùng, có lẽ bạn đã thoải mái với tính bảo mật của chính liên kết. Trong trường hợp này, nó không kém an toàn để đặt cùng một giá trị vào ViewState.

  • ViewState is Visible in Source: Mặc dù có thể truy cập tự do trong trường ẩn gọi là __VIEWSTATE, thông tin trạng thái chế độ xem không phải là văn bản rõ ràng. Theo mặc định, mã xác thực máy cụ thể được tính trên dữ liệu và được nối vào chuỗi trạng thái chế độ xem. Văn bản kết quả sau đó chỉ là Base64 được mã hóa, nhưng không được mã hóa. Tuy nhiên, nếu tính bảo mật dữ liệu là mong muốn, thì SSL là giải pháp duy nhất vì nó bảo vệ không chỉ xem trạng thái mà còn tất cả dữ liệu di chuyển đến và đi từ trang. Trạng thái xem giải mã vẫn có thể, nhưng một số bước phải được thực hiện; không chỉ một số cấu trúc nội bộ và không có giấy tờ được tháo rời, nhưng một số trường hợp cũng phải xảy ra. Ngoài ra, hãy xem xét rằng trạng thái xem giả mạo thường được phát hiện trên máy chủ và một ngoại lệ bảo mật bảo mật được ném. Cuối cùng, và quan trọng nhất, trạng thái xem có chứa dữ liệu, không phải . Trừ khi bạn giảm rõ ràng cài đặt bảo mật mặc định cho trang, không có nhiều hacker có thể làm gì để sửa đổi trạng thái xem. Nếu bạn thay đổi cài đặt bảo mật mặc định, bạn nên cẩn thận về trạng thái xem. Một hacker có thể sửa đổi dữ liệu đại diện cho trạng thái của trang. Đây không phải là một lỗi cho mỗi se và mở lỗ cho các cuộc tấn công chỉ khi các quy tắc cơ bản của xác nhận dữ liệu và kiểm tra dữ liệu không được thi hành. Nhưng điều này, bạn hiểu, là một vấn đề chung chung hơn khi bạn đang cố viết mã bảo mật. Xem trạng thái nội bộ khá phức tạp và đủ lớp để ngăn chặn các cuộc tấn công. Mã hóa là yếu tố quan trọng nhất trong việc bảo vệ thông tin trạng thái xem. Để làm cho trạng thái xem an toàn hơn, chỉ thị ASP.NET @Page hỗ trợ một thuộc tính được gọi là EnableViewStateMac mà mục đích duy nhất của nó là phát hiện bất kỳ nỗ lực nào có thể làm hỏng dữ liệu gốc.

  • Nếu EnableViewStateMac là True, khi trang đăng lại trạng thái chế độ xem được mã hóa được kiểm tra theo thuật toán để xác minh rằng nó không bị giả mạo trên máy khách. Hiệu ứng ròng là bạn có thể đọc nội dung của trạng thái xem, nhưng để thay thế nó, bạn cần khóa mã hóa, đó là trong LSA của máy chủ Web.