2010-09-22 12 views
5

Sử dụng CakePHP 1.3, tôi có biểu mẫu (đang hoạt động) có các trường biểu mẫu được tạo động (qua Javascript). Tất cả mọi thứ hoạt động tốt, nhiều mô hình được lưu thông qua saveAll(), và nó chỉ là đẹp.Tôi có thể sử dụng các trường biểu mẫu được tạo động với Thành phần bảo mật trong CakePHP 1.3 không?

Nhưng, tôi bị mờ đen đến 404 bất cứ khi nào tôi bật thành phần Bảo mật (hy vọng nhận được một số tính năng bảo vệ CSRF tự động).

Tôi hiểu rằng điều này có thể là (có thể là!) Do các trường biểu mẫu được tạo động, như được đề cập trong tài liệu.

Có cách nào giúp họ chơi cùng nhau không?

Trả lời

5

Bạn cũng không thể có Bánh và ăn. (Cha-ching!)

Bảo vệ CSRF có nghĩa là chỉ có một danh sách nhất định các trường biểu mẫu được phép gửi. Danh sách này được quyết định và sửa vào thời điểm biểu mẫu được tạo. Bạn không thể được bảo vệ CSRF tự động thay đổi các trường trong biểu mẫu.

Có hai giải pháp:
Nếu số lượng và tên của trường được tạo động bị giới hạn, hãy tạo tất cả chúng trong biểu mẫu và ẩn chúng bằng CSS, sau đó hiển thị chúng bằng Javascript. Bằng cách này, bạn không tự động tạo các trường, nhưng chỉ tự động hiển thị chúng.
Nếu điều đó không hiệu quả, bạn có thể đưa vào danh sách trắng các trường bằng cách sử dụng $disabledFields option (một lần nữa, chỉ khi tên của chúng được biết trước) hoặc tắt CSRF hoàn toàn với tùy chọn $validatePost.

+0

bạn có thường xuyên sử dụng thành phần bảo mật không? Dường như với tôi rằng nó có thể là một chút quá mức cần thiết trong trường hợp chung nhất. Đặc biệt trong khi phát triển. Bạn có thấy nó là hợp lý để xây dựng một ứng dụng mà không có nó, sau đó chỉ cần bật nó để sản xuất? –

+0

Vì vậy, đối với phiên bản "băm phiên" cổ điển, hãy đặt băm trong biểu mẫu, kiểm tra phiên băm phù hợp trên biểu mẫu bài đăng "- nếu tôi muốn bảo mật hơn một chút so với những gì mà Bánh cung cấp theo mặc định - tôi cần phải fiddle với phiên và tự mình làm. Đúng? Cảm ơn! –

+1

@Travis Tôi muốn nói nếu không có lý do * không * để sử dụng nó, bạn nên sử dụng nó. Nếu nó gây ra nhiều vấn đề hơn là nó giải quyết mặc dù, nó không hoàn toàn cần thiết. Nó phụ thuộc vào mức độ bảo mật bạn cần trong ứng dụng của mình, khía cạnh không ngẫu nhiên-POST-xa lạ của CSRF có thể rất quan trọng đối với ứng dụng của bạn. Các khía cạnh không-không-fiddling-với-form-lĩnh vực có thể được chủ yếu là nhân rộng bằng cách mã hóa cẩn thận và sử dụng tùy chọn '$ fieldlist' của' Model :: save() '. SecurityComponent là tốt đẹp để nhanh chóng thiết lập xác thực HTTP cơ bản khi bạn cần. – deceze