2010-05-15 1 views
7

Điều gì sẽ xảy ra nếu tôi có biểu mẫu ChangePassword với trường ID ẩn của người dùng.Ngăn chặn thay đổi trường ẩn

BadPerson biết id của GoodPerson. Anh ta mở biểu mẫu Thay đổi mật khẩu bằng FireBug, thay đổi Id của mình thành Id của GoodPerson, do đó thay đổi mật khẩu cho GoodPerson. Tất nhiên tôi có thể tạo ra một số logic máy chủ sẽ ngăn chặn điều này, nhưng tôi nghĩ rằng nên có một số giải pháp hộp, mà ném nếu lĩnh vực ẩn được thay đổi, mà tôi không biết.

Cảm ơn trước.

EDIT Ok, thay đổi mật khẩu là một ví dụ xấu. Bất kỳ hình thức chỉnh sửa mà tôi có id trong lĩnh vực ẩn có cùng một vấn đề.

Trả lời

6

Không có gì sẽ cho bạn biết rằng giá trị của một giá trị của trường ẩn đã được thay đổi hay không. Để người dùng thay đổi mật khẩu của mình, điều đó có nghĩa là anh ta cần phải được xác thực. Khi sử dụng các hình thức xác thực ID của người dùng được xác thực hiện tại được lưu trữ trong một cookie được mã hóa mà không thể sửa đổi được.

Điều này có nghĩa là bạn không nên sử dụng các trường ẩn để lưu trữ người dùng hiện được kết nối. Chỉ cần sử dụng được xây dựng trong FormsAuthentication mechanism in ASP.NET và không bao giờ lưu trữ thông tin như vậy trong các lĩnh vực ẩn. Cách ASP.NET biết rằng giá trị của cookie không bị giả mạo là nó ký nó với số machineKey được chỉ định trong cấu hình.

Có một quy tắc quan trọng mà bạn nên tuân theo khi giao dịch với bảo mật và xác thực: luôn sử dụng các cơ chế bảo mật tích hợp, không bao giờ tự cuộn.

+0

Tôi sẽ làm điều đó thứ hai, đừng cố gắng tự làm, sử dụng xác thực biểu mẫu, nó sẽ xử lý tất cả những điều đó cho bạn. – Doobi

+0

Tôi cũng muốn thêm rằng khi cho phép người dùng thay đổi mật khẩu của họ, bạn nên nhập mật khẩu hiện tại cùng với mật khẩu mới. Điều này cung cấp thêm một điểm xác thực mà bạn có thể thực hiện. – BradBrening

+0

Ok, nhưng nếu nó không phải là một người dùng, nhưng một số đối tượng khác, vì nó rất thuận lợi để lưu trữ id của nó. > Không có gì sẽ cho bạn biết rằng giá trị của giá trị của trường ẩn đã được thay đổi hoặc không Tôi không đồng ý với điều này. Tốt viewstate cũ có thể :) Có nên có một cái gì đó tôi belive. Nếu không thì có một lỗ hổng lớn về an ninh. –

20

Tôi đồng ý với Darin rằng việc xác thực biểu mẫu sẽ xử lý vấn đề cụ thể được đề cập ở trên (thay đổi mật khẩu). Câu trả lời này là cho câu hỏi tổng quát hơn về việc đảm bảo rằng giá trị của trường ẩn không bị thay đổi.

Giải pháp tốt nhất cho việc này là bao gồm một trường ẩn khác có chứa giá trị băm của giá trị của trường ẩn đầu tiên. Bằng cách đó, nếu trường ẩn thứ nhất được thay đổi, bạn sẽ biết nó. HTML được tạo trông giống như sau:

<input id="productId" name="productId" type="hidden" value="1" /> 
<input id="productId_sha1" name="productId_sha1" type="hidden" value="vMrgoclb/K+6EQ+6FK9K69V2vkQ=" /> 

This article cho thấy làm thế nào để làm điều đó và bao gồm mã nguồn cho một phần mở rộng Html.SecuredHiddenField mà sẽ chăm sóc của logic cho bạn.

+1

liên kết chính xác là: http: //blog.slatner.com/geeky/securing-form-values-in-asp-net-mvc.html. Cảm ơn –