Tại sao tôi nhận được 400 Yêu cầu xấu?


8

Tôi vừa hoàn thành việc thiết lập một máy chủ trên AWS ECS.

Tất cả các cấu hình giống hệt với một máy chủ khác mà tôi có, ngoại trừ phiên bản Apache (từ 2.2 đến 2.4) và phiên bản PHP (từ 5.3 đến 5.6).

Tôi đã sửa đổi tệp index.php của mình để chỉ in ra php_info (), nhưng tôi vẫn nhận được:

Yêu cầu xấu

Trình duyệt của bạn đã gửi một yêu cầu mà máy chủ này không thể hiểu được. Ngoài ra, đã xảy ra lỗi 400 Yêu cầu Không hợp lệ khi cố gắng sử dụng ErrorDocument để xử lý yêu cầu.

Máy chủ Apache / 2.4.25 (Amazon) tại xxx.yyy.com Cổng 80

Tôi đã xem xét tất cả các nhật ký được lưu từ các truy cập của tôi và đây là những gì tôi nhận được từ quyền truy cập cụ thể này:

lỗi_log

[Tue Jan 24 16:20:46.154208 2017] [suexec:notice] [pid 32139] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) 
[Tue Jan 24 16:20:46.249527 2017] [auth_digest:notice] [pid 32146] AH01757: generating secret for digest authentication ... 
[Tue Jan 24 16:20:46.250415 2017] [lbmethod_heartbeat:notice] [pid 32146] AH02282: No slotmem from mod_heartmonitor 
[Tue Jan 24 16:20:46.276823 2017] [mpm_prefork:notice] [pid 32146] AH00163: Apache/2.4.25 (Amazon) OpenSSL/1.0.1k-fips configured -- resuming normal operations 
[Tue Jan 24 16:20:46.276840 2017] [core:notice] [pid 32146] AH00094: Command line: '/usr/sbin/httpd'

access_log

90.152.127.182 - - [24/Jan/2017:16:21:03 +0000] "GET / HTTP/1.1" 400 437 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" 
90.152.127.182 - - [24/Jan/2017:16:21:04 +0000] "GET /favicon.ico HTTP/1.1" 400 437 "http://xxx.yyy.com/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"

ssl_access_log

90.152.127.182 - - [24/Jan/2017:16:12:24 +0000] "GET / HTTP/1.1" 400 434 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36" 
90.152.127.182 - - [24/Jan/2017:16:12:25 +0000] "GET /favicon.ico HTTP/1.1" 400 434 "https://xxx.yyy.com/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"

Điều gì có thể gây ra tình trạng 400 của tôi? Trước khi bạn hỏi, tôi đã cài đặt mod_ssl, vâng.


Nắm bắt yêu cầu và nhìn vào nó. Tốt nhất là cả phía máy khách và máy chủ. Điểm tầm thường nhất có thể là chúng khác nhau.
grochmal

Câu trả lời:


17

Đảm bảo bạn không có các ký tự bất hợp pháp trong máy chủ ảo của mình ' ServerName.

Tôi gặp vấn đề này trong khi di chuyển "sub_domain.test.com" từ Apache 2.2 sang 2.4.

Dấu gạch dưới trong "tên miền phụ" khiến Apache 2.4 phản hồi 400 (Bad Request)nhưng không có thêm gợi ý nào trong nhật ký lỗi.

Ngoài ra, hãy xem /programming/2180465/can-domain-name-subdomains-have-an-underscore-in-it


1
Đó là nó cho tôi. Tôi đã làm việc với một container aper httpd apache apache. Và tôi đã không tải xuống tệp bất cứ khi nào sử dụng tên máy chủ: httpd_filesver_7003. Ngay cả từ whithin máy. Khi cố gắng tải xuống các tệp bằng localhost không có vấn đề. Bây giờ tôi đã đổi tên tên máy chủ thành httpd.fileserver.7003 và vấn đề đã được giải quyết. Điều cực kỳ đáng lo ngại là ERRO LOG đã không báo cáo bất kỳ thông tin liên quan nào về "nguyên nhân" của yêu cầu xấu
99Sono

Bạn đã ở đâu @Chris? Tôi đã vật lộn một tuần do gạch dưới này. (btw I on windows 10, Xampp)
shyammakwana.me

3

Tôi có cùng một vấn đề. Tôi nghi ngờ bản sửa lỗi này được bao gồm: CVE-2016-8743 Thực thi ngữ pháp yêu cầu HTTP tương ứng với RFC7230 cho các dòng yêu cầu và tiêu đề yêu cầu, để ngăn chặn phản ứng phân tách và ô nhiễm bộ đệm bởi các máy khách độc hại hoặc proxy xuôi dòng.


Công cụ bắt vít RFC7230 là của mozilla, tức là sự phát triển của Firefox và 51.0 đang gửi yêu cầu mồi HSTS xấu. Nhưng User-Agent:chuỗi trong câu hỏi của OP đề xuất một yêu cầu từ Chrome.
grochmal

1
Chỉ cần có một kỹ sư về kỹ sư Apache của tôi thêm httpProtocolOptions không an toàn để thử nghiệm và yêu cầu đã được thực hiện. Yêu cầu của tôi là một opensl GET / HTTP / 1.1 (mô phỏng màn hình kiểm tra F5 Heath)
user7400387

1
Ồ được thôi. Bạn đang đề xuất rằng apache đã làm hỏng việc sửa CVE đó. Đây là một điểm hợp lệ (+1).
grochmal

Đã sửa lỗi của tôi. Tôi thấy rằng trước khi yêu cầu Apache 2.4.25 khoảng trắng được xử lý với sự khoan hồng hơn. Kỹ sư F5 của tôi có khoảng trắng giữa HTTP / 1.1 và CRLF. Trong thế giới F5, có vẻ như GET / HTTP / 1.1 \ r \ nHOST: test.com \ r \ nConnection: close \ r \ n \ r \ n Khoảng trắng giữa HTTP / 1.1 và \ r \ nhost là vấn đề yêu cầu không tuân thủ. Phiên bản trước của Apache này đã được cho phép.
dùng7400387

Tôi cũng gặp phải lỗi này. Không có thêm không gian trong yêu cầu của tôi; Tôi khá chắc chắn rằng đó là một lỗi trong Apache, nhưng thật lạ khi không ai nhận thấy. Tôi đã kết thúc việc hạ cấp xuống Apache 2.2 để khắc phục sự cố.
dùng541686
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.