07/09/2018, 15:51

Request "lạ"

Nếu là một web developer thì bạn cũng ít nhiều phải đụng chạm tới proxy/load balancer hay app server. Trong rất nhiều thao tác với phần này thì việc thường xuyên kiểm tra log để phát hiện ra những điều bất thường là thao tác không thể bỏ qua. Ngữ cảnh Một khi website/service đã public thì có ...

Nếu là một web developer thì bạn cũng ít nhiều phải đụng chạm tới proxy/load balancer hay app server. Trong rất nhiều thao tác với phần này thì việc thường xuyên kiểm tra log để phát hiện ra những điều bất thường là thao tác không thể bỏ qua.

Ngữ cảnh

Một khi website/service đã public thì có nghĩa là nó đã được "phơi" ra giữa thế giới internet. Thế giới internet cũng giống thế giới con người ở khía cạnh "ở đâu cũng có người này người kia". Nghĩa là có những request ghé thăm với mục đích trong sáng, cũng có những request mang tính thăm dò, phá hoại.
Vậy thì bạn cần phản ứng thế nào với từng loại request không có thiện ý này?

Ví dụ #1

185.130.5.207 - - [23/Dec/2015:20:32:19 +0900] "GET //myadmin/scripts/setup.php HTTP/1.1" 404 2413 "-" "-"
185.130.5.207 - - [23/Dec/2015:20:32:19 +0900] "GET //phpMyAdmin/scripts/setup.php HTTP/1.1" 404 2413 "-" "-"
185.130.5.207 - - [14/Jan/2016:11:47:07 +0900] "GET //websql/scripts/setup.php HTTP/1.1" 404 2413 "-" "-"

Ví dụ #2

61.231.4.180 - - [01/Sep/2015:17:51:01 +0900] "CONNECT vip163mx01.mxmail.netease.com:25 HTTP/1.0" 400 172 "-" "-"
111.248.118.30 - - [01/Sep/2015:22:53:04 +0900] "CONNECT 163mx01.mxmail.netease.com:25 HTTP/1.0" 400 172 "-" "-"
141.212.122.90 - - [02/Sep/2015:22:55:32 +0900] "CONNECT proxytest.zmap.io:80 HTTP/1.1" 400 172 "-" "-"

Ví dụ #3

Giả sử domain của bạn là https://abc.com, nhưng lại nhận được những request như sau:

146.185.239.100 - - [12/Jan/2016:10:00:55 +0900] "GET http://www.alexa.com/ HTTP/1.1" 200 19871 "-" "-"
146.185.239.100 - - [12/Jan/2016:10:25:16 +0900] "GET http://www.alexa.com/ HTTP/1.1" 200 19871 "-" "-"

Chi tiết về 3 loại log trên có ở link này

Cách khắc phục

Nếu ở ví dụ #1 và #2 có status của request là 2XX thì nghĩa là hở rồi, vá thôi.
Còn ở #3 thì bạn telnet vào host https://abc.com, thực hiện GET một external host khác. Nếu như data trả về là data của external host, thì lại hở rồi, vá thôi :D

Mình từng gặp 1 case khá oái oăm liên quan đến #3 và Rails như sau:
Ở trang homepage của web, mình có cache partial như sau:

cache "this_partial" do
<%= link_to 'Link Name', resouce_url %> (*)
end

Và ngay sau khi mình deploy thì có 1 request dạng #3 đổ về, đã biến link (*) của mình thành:

<a href="http://www.alexa.com/resouce">Link Name</a>

thay vì

<a href="https://abc.com/resouce">Link Name</a>

Fix bằng cách đưa absolute url về relative path ngay. Hú hồn.

Rất mong nhận được chia sẻ về nhiều dòng log "lạ" nữa từ kipaloger.

Ref:
https://wiki.apache.org/httpd/ProxyAbuse
http://www.the-art-of-web.com/system/telnet-http11/

0