2009-06-13 32 views
50

Hãy tưởng tượng bạn có API trang web chấp nhận dữ liệu dưới dạng yêu cầu GET có tham số hoặc dưới dạng yêu cầu POST (ví dụ: với dữ liệu POST được phân tách bằng url chuẩn, &-dữ liệu POST khác nhau). Nếu bạn muốn đăng nhập và phân tích các cuộc gọi API, các yêu cầu GET sẽ dễ dàng, vì chúng sẽ nằm trong nhật ký apache. Có cách nào đơn giản để có được dữ liệu POST trong nhật ký apache không?Cách tốt nhất để đăng nhập dữ liệu POST trong Apache là gì?

(Tất nhiên chúng ta có thể ghi lại các dữ liệu POST một cách rõ ràng trong việc áp dụng, nhưng tôi muốn có một cách cấu hình cấp cho phép tôi không lo lắng về nó trong mã.)

+1

câu hỏi liên quan tại ServerFault: http://serverfault.com/questions/51295/logging- http-post-in-apache –

Trả lời

2

tôi sẽ làm điều đó trong ứng dụng, thực sự. Nó vẫn có thể cấu hình trong thời gian chạy, tùy thuộc vào hệ thống logger của bạn, tất nhiên. Ví dụ: nếu bạn sử dụng Nhật ký Apache (log4j/cxx), bạn có thể định cấu hình trình ghi nhật ký dành riêng cho các URL đó và sau đó định cấu hình nó tại thời gian chạy từ tệp XML.

+0

Mối quan ngại của tôi là mọi trình xử lý EVI sẽ phải ghi lại dữ liệu ngay từ đầu - dễ quên khi bạn thêm, và tốt nhất là nó chỉ thêm vào bản mẫu. –

+0

Bất kỳ khung công tác tốt nào đều phải có bộ lọc trước và sau hoặc tương đương với phần mềm trung gian sẽ cho phép bạn kích hoạt và quên. – blockhead

6

Không chính xác một câu trả lời, nhưng tôi chưa bao giờ nghe nói về một cách để làm điều này trong chính Apache. Tôi đoán nó có thể là có thể với một mô-đun mở rộng, nhưng tôi không biết một trong những đã được viết.

Một mối quan tâm là dữ liệu POST có thể khá lớn và nếu bạn không đặt một số giới hạn về mức độ đăng nhập, bạn có thể hết dung lượng đĩa sau một thời gian. Đó là một lộ trình có thể cho các tin tặc gây rối với máy chủ của bạn.

+2

Tôi đồng ý với nửa sau hoàn toàn! Vì không có giới hạn về dữ liệu POST, nó có thể bao gồm tất cả các loại dữ liệu, bao gồm cả mật khẩu mà bạn không muốn lưu trữ trong nhật ký. Có thể có dữ liệu an toàn và lớn khác mà bạn không muốn trong nhật ký. –

+2

Mật khẩu ghi nhật ký không phải là vấn đề, bạn vẫn chưa gửi mật khẩu bằng văn bản thuần túy, phải không? – supo

+7

@supo: ngay cả khi mật khẩu được mã hóa qua SSL, chúng vẫn sẽ được ghi bằng văn bản thuần túy. Nhưng mối quan tâm đặc biệt mà tôi đã giải quyết là lấp đầy không gian đĩa của bạn, không lộ mật khẩu trong nhật ký. –

38

Sử dụng Apache mod_dumpio. Hãy cẩn thận vì những lý do rõ ràng.

Lưu ý rằng mod_dumpio stops logging binary payloads at the first null character. Ví dụ: multipart/form-data việc tải lên tệp gzip'd có thể sẽ chỉ hiển thị vài byte đầu tiên với mod_dumpio.

Cũng lưu ý rằng Apache có thể không đề cập đến mô-đun này trong httpd.conf ngay cả khi nó có trong thư mục /modules. Chỉ cần thêm theo cách thủ công LoadModule sẽ hoạt động tốt.

+1

Tính năng apache điển hình: đọc toàn bộ tài liệu, mọi thứ được thiết lập và không có hiệu lực. Nó là một crap. – peterh

12

Mặc dù đã muộn để trả lời. Mô-đun này có thể làm: https://github.com/danghvu/mod_dumpost

+1

tuyệt vời! nó làm cho ý nghĩa tuyệt đối để đổ dữ liệu bài đăng cho phân tích logfile, tức là đối với những thứ như cố gắng tiêm sql. – KIC

0

Một tùy chọn dễ dàng hơn có thể là ghi nhật ký dữ liệu POST trước khi nó đến máy chủ. Đối với các ứng dụng web, tôi sử dụng Burp Proxy và đặt Firefox để sử dụng nó làm proxy HTTP/S và sau đó tôi có thể xem (và mangle) dữ liệu 'trên dây' trong thời gian thực.

Để tạo yêu cầu API mà không cần trình duyệt, SoapUI rất hữu ích và có thể hiển thị thông tin tương tự. Tôi sẽ đặt cược rằng bạn có thể có thể cấu hình SoapUI để kết nối thông qua Burp là tốt (chỉ là một đoán mặc dù).

4

Bạn có thể cài đặt mod_security và đưa vào /etc/modsecurity/modsecurity.conf:

SecRuleEngine On 
SecAuditEngine On 
SecAuditLog /var/log/apache2/modsec_audit.log 
SecRequestBodyAccess on 
SecAuditLogParts ABIJDFHZ 
+2

modsecurity có gói Ubuntu trong khi các gói khác thì không. –

1

Bạn có thể sử dụng ModSecurity để xem dữ liệu POST.

Cài đặt trên Debian/Ubuntu:

$ sudo apt install libapache2-mod-security2 

Sử dụng các tập tin cấu hình đề nghị:

$ sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf 

Và sửa các dòng sau

SecRuleEngine DetectionOnly 
SecAuditEngine RelevantOnly 

để

SecRuleEngine On 
SecAuditEngine On 

Nạp lại Apache:

$ sudo service apache2 reload 

Bây giờ bạn sẽ tìm thấy dữ liệu của bạn đăng nhập dưới /var/log/apache2/modsec_audit.log

$ tail -f /var/log/apache2/modsec_audit.log 
--2222229-A-- 
[23/Nov/2017:11:36:35 +0000] 
--2222229-B-- 
POST/HTTP/1.1 
Content-Type: application/json 
User-Agent: curl 
Host: example.com 

--2222229-C-- 
{"test":"modsecurity"} 
Các vấn đề liên quan