Triệu chứng

Khi bạn sử dụng tính năng giao diện cổng chung IIS (CGI) để lưu trữ một chương trình thực thi sử dụng thư viện số để chuyển yêu cầu, yêu cầu có thể được misdirected dựa trên sự hiện diện của một tiêu đề yêu cầu "PROXY". Một số nền tảng ứng dụng web được xác định sử dụng thư viện này. Điều này bao gồm PHP, Python và đi, những người khác.

Nguyên nhân

CGI là một giao diện cho phép máy chủ web ứng dụng máy chủ chạy quá trình thực thi. Khi một yêu cầu nhận được một máy chủ web, máy chủ khởi động trình mới để xử lý đơn yêu cầu đó. Khi hoàn thành yêu cầu trình thoát. Để quá trình truy cập vào dữ liệu yêu cầu, tiêu đề yêu cầu được bao gồm như biến môi trường có "HTTP_" prepended tên của họ. Do đó, quá trình CGI cho yêu cầu có một tiêu đề có tên "Proxy" đã biến môi trường "HTTP_PROXY" có giá trị tương tự như tiêu đề yêu cầu.Dòng lệnh cURL và thư viện thường được sử dụng để kích hoạt các loại ứng dụng cho yêu cầu cho các loại máy chủ, bao gồm các máy chủ web. Thư viện này có thể được cấu hình bằng cách sử dụng tham số dòng lệnh hoặc nó có thể đọc các tham số cấu hình từ các biến môi trường của quá trình lưu trữ. "HTTP_PROXY" là một trong nhiều cấu hình tham số được sử dụng cURL. "HTTP_PROXY" được sử dụng cURL để gửi yêu cầu HTTP đến cấu hình proxy.Lưu ý Điều này là không liên quan đến "HTTP_PROXY" sự hiện diện của một tiêu đề yêu cầu khách hàng.Khi Rot được lưu trữ trong trình CGI và có quá trình biến môi trường được đặt tên là "HTTP_PROXY", cURL sử dụng giá trị cho dữ liệu yêu cầu thông qua proxy HTTP có giá trị được chỉ định trong các biến môi trường. Điều này xảy ra vì Rot sẽ "HTTP_PROXY" là một cấu hình chỉ và không phải là một tiêu đề yêu cầu khách hàng.

Giải pháp

Để khắc phục sự cố này, không sử dụng CGI trên máy chủ đang chạy IIS. CGI là một giao diện cũ chủ yếu được thay thế bằng giao diện mới và thêm liên quan đến hiệu năng. Cụ thể, PHP, Python và đi sẽ được lưu trữ qua FastCGI trên IIS. FastCGI không sử dụng các biến môi trường tiêu đề yêu cầu khách hàng và không có vấn đề này. Tuy nhiên php, một số ứng dụng có thể sử dụng chức năng getenv() PHPs để lấy các biến môi trường. Ngay cả khi PHP không được lưu trữ trong trình CGI, nó sao chép CGI hiện bằng cách tiêm giá trị yêu cầu đầu vào bộ dữ liệu có sẵn cho chức năng getenv() . Nếu bạn sử dụng một ứng dụng PHP lấy HTTP_PROXY theo cách này, sau mitigations xoá giá trị đầu trang hoặc từ chối yêu cầu với một tiêu đề PROXY có hiệu lực.Nếu bạn phải sử dụng CGI cho một số lý do, chặn yêu cầu chứa tiêu đề yêu cầu tên "Proxy" hoặc xóa giá trị của tiêu đề.  Điều này là do "Proxy" không phải là tên tiêu đề yêu cầu tiêu chuẩn và trình duyệt sẽ thường không gửi.Để ngăn chặn yêu cầu chứa tiêu đề Proxy (giải pháp ưa thích), chạy dòng lệnh sau đây:

appcmd đặt cấu hình /section:requestfiltering / + requestlimits.headerLimits. [tiêu đề = 'proxy', sizelimit = '0']Lưu ý Appcmd.exe không thường trong đường dẫn và có thể được tìm thấy trong thư mục %systemroot%\system32\inetsrvĐể xoá giá trị của tiêu đề, bạn có thể sử dụng quy tắc ghi lại URL sau:

<system.webServer>    <rewrite>        <rules>            <rule name="Erase HTTP_PROXY" patternSyntax="Wildcard">                <match url="*.*" />                <serverVariables>                    <set name="HTTP_PROXY" value="" />                </serverVariables>                <action type="None" />            </rule>        </rules>    </rewrite></system.webServer>

Lưu ý URL Rewrite là một miễn phí thêm vào IIS và không được bao gồm trong IIS cài đặt mặc định.

Bạn cần thêm trợ giúp?

Bạn muốn xem các tùy chọn khác?

Khám phá các lợi ích của gói đăng ký, xem qua các khóa đào tạo, tìm hiểu cách bảo mật thiết bị của bạn và hơn thế nữa.

Cộng đồng giúp bạn đặt và trả lời các câu hỏi, cung cấp phản hồi và lắng nghe ý kiến từ các chuyên gia có kiến thức phong phú.