2011-03-11 25 views
13

Tôi đã xem cờ [NE] (noescape) trong mod_rewrite. Sau khi suy nghĩ một số tôi không thể tìm ra một tình huống khi tôi KHÔNG muốn sử dụng cờ. Có nghĩa là, có vẻ như hữu ích nhất để giữ cờ được bật trong hầu hết mọi RewriteRule. Không gọi cờ này đã khiến tôi gặp vấn đề trong một vài trường hợp.cờ cờ mod_rewrite NE - Khi nào thì hữu ích khi mã hóa các ký tự đặc biệt trong URL?

Hầu hết các quy tắc mà tôi xử lý là chuyển hướng HTTP ([R]), thay vì chuyển qua.

Ai đó có thể làm sáng tỏ một chút là khi có hữu ích khi mod_rewrite mã hóa URL không?

Thực tiễn tốt để bật cờ này hay sử dụng hành vi mặc định cho phép mod_rewrite thoát khỏi các ký tự đặc biệt này? Tại sao?

+3

Câu hỏi hay, tôi rất ngạc nhiên khi bạn chưa có câu trả lời nào.Và tôi thậm chí còn ngạc nhiên hơn khi hàng chục câu trả lời trên SO về chuyển hướng www sang phi www (và ngược lại) không thêm '[NE]' vào trong 'RewriteRule'. Bạn đã lưu ngày của tôi, tôi không thể hiểu tại sao url của tôi được mã hóa hai lần trong khi chuyển hướng mod_rewrite. +1 –

Trả lời

1

Cờ [NE] cực kỳ hữu ích khi bạn thêm url yêu cầu như một phần của - giả sử - chữ ký ủy quyền.

Tôi vừa gặp lỗi khi ủy quyền đang làm việc với .htaccess nhưng không được bật tính năng này. Hóa ra nguyên nhân là chuyển hướng là mã hóa url các mục đã kết thúc trong tham số php $_GET. Để giải quyết các lỗi tôi đã thay đổi:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*[^/0-9])$ $1/ [R=301,L] 

để

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*[^/0-9])$ $1/ [NE,R=301,L] 

(chữ ký uỷ quyền bao gồm nhiều yếu tố, một trong số đó là địa chỉ yêu cầu)

+2

Downvoter, bất kỳ bình luận nào? –

+2

* "Ai đó có thể tiết lộ một chút ánh sáng về' khi có hữu ích để mod_rewrite mã hóa URL không? "" * – 5ervant

+0

@Servant -Tôi đã trả lời lý do tại sao ", thực tế là tốt để bật cờ này hoặc sử dụng hành vi mặc định cho phép mod_rewrite thoát khỏi những ký tự đặc biệt này? Tại sao? " w một ví dụ. - Về cơ bản chia sẻ một kinh nghiệm với việc sử dụng lá cờ này. –

3

Nếu bạn nhìn vào source code for mod_rewrite , bạn sẽ nhận thấy rằng nó đặt cờ proxy-nocanon nếu noescape được bật.

Trong revision where that line was first added, nó cũng bao gồm nhận xét này:

chắc chắn rằng mod_proxy_http không canonicalize URI, và duy trì bất kỳ chuỗi truy vấn (có thể qsappend'd) trong tên tập tin cho mod_proxy_http: proxy_http_canon ()

Tiếp theo đó, nếu bạn đọc mod_proxy documentation, bạn sẽ thấy đề cập đến sau đây nocanon:

Thông thường, mod_proxy sẽ chuẩn hóa URL ProxyPassed. Nhưng điều này có thể không tương thích với một số backend, đặc biệt là những người sử dụng PATH_INFO. Từ khóa nocanon tùy chọn ngăn chặn điều này và chuyển đường dẫn URL "thô" tới phần cuối. Lưu ý rằng có thể ảnh hưởng đến bảo mật của chương trình phụ trợ của bạn, vì nó loại bỏ sự bảo vệ giới hạn bình thường đối với các cuộc tấn công dựa trên URL được cung cấp bởi proxy.

Tôi có thể bị nhầm lẫn, nhưng điều đó ngụ ý với tôi rằng việc sử dụng các nocanon trong mod_proxy (và bằng cách mở rộng noescape trong mod_rewrite) có chi nhánh bảo mật tiềm năng. Điều đó sẽ giải thích lý do tại sao nó bị vô hiệu hóa theo mặc định, thậm chí nghĩ rằng nó có vẻ như nó sẽ hữu ích hơn để có nó được kích hoạt trong hầu hết các trường hợp.

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