2012-07-03 14 views
5

Tôi vừa bắt đầu sử dụng đá quý brakeman để khám phá ứng dụng đường ray của tôi cho các lỗ hổng bảo mật.Làm thế nào để bảo mật link_to @variable crosssite scripting vulnerabilities

Tôi đã quản lý mọi thứ gọn gàng, ngoại trừ một số cảnh báo tập lệnh chéo trang web.

Những bài chia sẻ sau điểm chung:

  • Họ đang tất cả các thẻ link_to
  • Tất cả họ đều có các biến Ví dụ trong lớp, alt hoặc tiêu đề thuộc tính
  • Các biến dụ tất cả các đại diện cho một truy vấn bản ghi hoạt động bao gồm các mô hình được liên kết
  • Các biến mẫu là tất cả "có thể nhận xét". Điều này mô tả một liên kết đa hình cho các nhận xét do người dùng tạo, tương tự trong cách tiếp cận với phiên bản sửa đổi của this Railscast.

ví dụ

<%= link_to "Click" , :class=> @model.association.attribute, :alt=> @model.association.attribute, :title=> @model.association.attribute, @model.association %> 

nơi

@model = @commentable = Model.includes(:association1, association2: {:nested-association1, :nested-association2}).find(params[:id]) 

là cái gì tôi cần phải được quan tâm/có hành động gì? Tôi nghĩ Rails 3.2 đã thoát khỏi những điều này theo mặc định.

Tôi muốn được tư vấn để giúp tôi hiểu vấn đề này tốt hơn và xác định các bước tôi nên thực hiện, nếu có.

Trả lời

4

Tôi không thể tạo lại bất kỳ cảnh báo nào từ mã bạn đã cung cấp. Bạn đang sử dụng phiên bản Brakeman nào? Cảnh báo thực tế (được redacted khi cần thiết) là gì?

I nghi ngờ bạn đang nhận được cảnh báo vì đầu vào của người dùng đang được phát hiện trong giá trị href của liên kết. Xem this pull request để biết thêm thông tin về lý do tại sao điều này có thể nguy hiểm.

Thật không may, nếu không có thêm thông tin, tôi không thể biết đây có phải là thông tin sai lạc cần được sửa chữa hoặc cảnh báo hợp pháp hay không.

Sửa:

Được rồi, bây giờ tôi đang nhìn thấy những cảnh báo khi thử nghiệm với @model = @commentable = ... Đây là một vấn đề với cách Brakeman là xử lý việc chuyển nhượng.

Nếu bạn đang liên kết với một phiên bản của mô hình, sẽ không có cảnh báo. Nếu bạn đang liên kết với một thuộc tính mô hình thì điều này được tính là đầu vào của người dùng.

Có, Rails sẽ thoát HTML, nhưng nó không xử lý các liên kết bắt đầu bằng javascript: hoặc data:can be used for XSS.

+0

cảm ơn câu trả lời của bạn Justin. Sau khi nhìn lại lỗi, tôi cũng nhận thấy rằng tất cả chúng đều là các câu lệnh 'include' phức tạp (nghĩa là một số mô hình, một số mô hình được lồng nhau). Ngoài ra (và có lẽ đây là nguyên nhân) tất cả chúng đều "có thể nhận xét". Tôi sẽ cập nhật câu hỏi của mình chi tiết hơn. –

+0

có lẽ tái cấu trúc '@model = @commentable = ARquery' của tôi thành hai dòng có thể giải quyết vấn đề này? Nhưng tôi vẫn không chắc tôi hiểu tại sao đây là một vấn đề. Won't Rails sẽ thoát khỏi điều này theo mặc định?Đánh giá cao bất kỳ lời khuyên nào để giúp tôi cải thiện sự hiểu biết của mình. –

+0

Đã cập nhật câu trả lời theo thông tin mới này. Dường như việc chia tách trên hai dòng sẽ giải quyết được vấn đề, đó là một lỗi trong Brakeman. – Justin

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