2012-03-15 30 views
10

Tôi thử gửi yêu cầu như http://site.com/abc%2Fabc và nó không hoạt động (gửi trạng thái 400). Làm thế nào tôi hiểu tomcat không chấp nhận phân tách đường dẫn mã hóa vì lý do bảo mật, nhưng tôi không biết làm thế nào để kích hoạt mã hóa này. (Tôi đã tìm thấy tùy chọn AllowEncodedSlashes cho máy chủ http apache). Bạn có thể giúp tôi được không?Mã hóa các dấu gạch chéo tiến và lùi trong tomcat 7?

CẬP NHẬT

Tôi cố định rắc rối này bằng tí hon hack - trước khi làm thay thế tất cả '/' ký tự trên '|' và sau khi đảo ngược các ký tự này trên '/'

+1

Tôi đã gặp vấn đề tương tự nhưng tôi không thể tìm thấy câu hỏi này trên SO vì tôi không nhận ra sự cố có liên quan đến dấu gạch chéo được mã hóa. Tôi đã thấy một lỗi trạng thái 400 với Tomcat 7 với một phản ứng cơ thể trống rỗng/không có phản ứng, vì vậy đó là những gì tôi tìm kiếm trong google. Tôi hy vọng việc thêm nhận xét này cùng với từ khóa có thể giúp những người có cùng vấn đề tìm câu hỏi này :) – magnum87

Trả lời

17

Có tùy chọn Tomcat để cho phép phân tách đường dẫn được mã hóa.

Đặt CATALINA_OPTS env var để

-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true 

này sẽ cho phép slashes mã hóa.

+4

Chỉ cần lưu ý, tính năng này bị tắt theo mặc định vì đây là rủi ro bảo mật: xem http://www.tomcatexpert.com/blog/2011/11/02/best-practices-securing-apache-tomcat-7 và http : //en.wikipedia.org/wiki/Directory_traversal_attack – mlathe

+2

Lưu ý rằng để sửa các dấu gạch chéo về phía trước, bạn cần org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH. Một tomcat xấu hổ quyết định phá vỡ HTTP, thay vì sửa chữa vấn đề bảo mật cơ bản (% 2F và% 5C hoàn toàn hợp lệ trong URL) –

+1

cũng lưu ý rằng Tomcat sẽ chuyển đổi dấu gạch chéo được mã hóa thành đường cắt thành dấu gạch chéo –

0

Bạn đã thử đặt URIEncoding="UTF-8" trong số <Connector trong số server.xml?

+2

Có. Tôi đặt URIEncoding = "UTF-8" trong server.xml. Nó không chỉ hoạt động với% 2F .. ví dụ% 3A - ":" làm việc. – pushistic

5

Chúng tôi cũng có thể thêm mục nhập này "org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH = true" trong catalina.properties để cho phép gạch chéo được mã hóa trong url.


Và để cho phép dấu gạch chéo ngược, bạn phải đặt các thuộc tính khác nhau. Refer this url cho cấu hình khác.

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