2011-03-02 30 views
5

Ví dụ
Hãy tưởng tượng tôi có các hình thức sau đâyViệc sử dụng các trường ẩn trong biểu mẫu có an toàn không?

<%= form_for(@comment) do |f| %> 

    <%= f.hidden_field :user_id%> 
    <%= f.hidden_field :article_id%> 

    <%= f.label :content %><br /> 
    <%= f.text_area :content %> 

    <%= f.submit %> 
    <% end %> 

tôi có: user_id và: giá trị article_id với:

Comment.new(:user_id => current_user.id, :article_id => @article.id) 

Khi tôi hiển thị dưới dạng trong trình duyệt nó sẽ giống như thế này :

<form action="/comments" method="post"> 

    <input some_rails_tokens_here /> 

    <!-- THIS AREA HERE--> 
    <input id="comment_user_id" name="comment[user_id]" type="hidden" value="1" /> 
    <input id="comment_article_id" name="comment[article_id]" type="hidden" value="1" /> 
    <!-- THIS AREA HERE--> 

    <label for="comment_content">Content</label><br /> 
    <textarea id="comment_content" name="comment[content]"></textarea> 

    <input type="submit" /> 
</form> 

Câu hỏi của tôi là, nếu ai đó thay đổi thông số bài đăng và thay vì là giá trị cho: user_id => 1 nó được thay đổi thành: user_id => 2. Tương tự với bài viết.

Tôi muốn tin rằng đã được xác minh với các mã thông báo đường ray, nhưng tôi không chắc chắn.

+0

Rất dễ thay đổi giá trị. Trong "firebug" -> "chỉnh sửa" tùy chọn, tôi chỉ cần thay đổi "giá trị" trong HTML và thì đấy! thay vì là người dùng 1 Tôi đã đăng bài với tư cách là người dùng 2. –

Trả lời

6

Trường ẩn trong biểu mẫu không an toàn hơn bất kỳ dữ liệu nào khác đến từ người dùng. Tức là, cần không được tin cậy một cách trivally: Nó đến từ người dùng và được mở để thao tác và tiêm đặc biệt.

Khi dữ liệu được gửi lại cho máy chủ, máy chủ nên xác rằng dữ liệu và không giả định rằng hoạt động được phép/không hợp lệ chỉ dựa trên một bối cảnh người dùng sửa đổi cụ thể. Tùy thuộc vào nhu cầu, phương pháp tiếp cận như tổng kiểm tra băm có thể được sử dụng để có mức độ tin cậy rất cao rằng dữ liệu không bị giả mạo (nhưng một lần nữa, này cần được máy chủ xác minh mỗi yêu cầu!). Sử dụng "trạng thái phiên" sẽ giảm thiểu hoàn toàn vấn đề bằng cách giữ dữ liệu khỏi vùng thao tác của người dùng.

Mã hóa vui vẻ.

1

Nếu giá trị của các trường đó là quan trọng, thì đừng tin tưởng người dùng trả lại chúng không thay đổi. Nếu không, một trường ẩn sẽ không kém hoặc không an toàn hơn một trường hiển thị thông thường - nếu nó ở trong HTML, ai đó có thể thay đổi nó.

3

Nếu nhận xét từ người dùng chưa đăng ký được phép thì tại sao lại bận tâm về user_id và nếu chỉ cho phép người dùng đã đăng ký sử dụng sessions để theo dõi người dùng thay vì chuyển user_id trong phần tử biểu mẫu.

Và để trả lời câu hỏi của bạn nếu sử dụng các trường ẩn là không an toàn, không kiểm tra sanity đúng cách, ngay cả trường hiển thị cũng không an toàn.

1

Dữ liệu được gửi từ máy khách đến máy chủ không thể tin cậy nếu không có kiểm tra phía máy chủ (bao gồm biểu mẫu HTML và cookie trình duyệt). Dữ liệu có thể được sửa đổi hoặc gửi một cách độc hại nhiều lần.

Tôi đã đọc các câu chuyện về trang web thương mại điện tử đã gửi giá sản phẩm từ biểu mẫu HTML. Người dùng giá rẻ có thể chỉnh sửa dữ liệu biểu mẫu HTML mà họ gửi tới máy chủ để thay đổi giá sản phẩm.

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