botprotection draft

웹 크롤러 등의 로봇을 통한 HTTP 요청을 제어한다.

/usr/local/m2/setting.json 다음 영역에 대해 기술한다.

{
  "functions": {
    "contents": {
      "botprotection": {
        "meta": {
          "enable": true,
          "OverridingCmd": false
        },

        "detect": {
          "robotsTxt": {
            "enable": true
          },
          "ip": {
            "enable": true
          },
          "userAgent": {
            "enable": true
          },
          "js": {
            "enable": true,
            "category" {
              ...
            }
          }
        },

        "flows": {
          "matchingList": [
            "name": "basic",
            "path": "/",
            "action": {
              "lv2": {"code": 403},
              "lv5": {"location": "/captcha?redirect=$URL"},
              "lv7": {"location": "/home"}
            }
          ]
        }
      }
    }
  }
}

How to use

Important

  • 이 함수는 바이패스 함수이므로, 캐싱엔진을 경유하지 않는다.

명령어 리스트

명령어

파라미터

동작

detect

(하위설정)

detect 실행

flows

(하위설정)

flows 실행

Important

  • 이 함수는 프로덕션 환경에서 명령어 사용을 금지한다.

  • 클라이언트에서 명령어 사용시, 보안 우회로가 만들어질 수 있으므로 아래 설정토록 한다.

  • meta.OverridingCmd: false

meta

"meta" : {
  "enable" : false,
  "OverridingCmd" : false
}
enable (기본: false)

Bot Protection 활성화

OverridingCmd (기본: false)
  • 명령어에 의한 설정 오버라이딩 활성화

  • 프로덕션 환경에서는 사용하지 않는다.

detect

"detect": {
  "robotsTxt": {
    "enable": true
  },
  "ip": {
    "enable": true,
    "disallows": [],
    "allows": []
  },
  "userAgent": {
    "enable": true,
    "disallows": [],
    "allows": []
  },
  "js": {
    "enable": true,
    "category": {
      "headless": true,
      "graphics": true,
      "audio": true,
      "locale": true,
      "extention": true,
      "cookie": true,
      "input": true,
      "system": true
    }
  }
}

robotsTxt

enable (기본: false)
  • robots.txt 에 허가되지 않은 (Disallow 명시된) 요청을 차단한다. 처리 방법은 flows 에 따른다.

  • 갱신 주기는 원본의 Cache-Control 에 따른다. (기본값: max-age=86400 )

ip

허가되지 않은 IP의 요청을 차단한다.

enable (기본: false)

IP 탐지 기능 활성화

disallows (기본: null)

IP 차단 목록

allows (기본: null)

IP 허용 목록

userAgent

허가되지 않은 클라이언트 요청을 차단한다.

enable (기본: false)

User-Agent 를 활용한 bot 탐지 기능 활성화

disallows (기본: null)

User-Agent 차단 키워드 목록

allows (기본: null)

User-Agent 허용 키워드 목록

Note

  • 설정에 명기한 disallows 또는 allows 항목을 DB 보다 우선순위가 높다.

  • disallows 설정은 allows 보다 우선순위가 높다.

js

클라이언트 브라우저 환경을 통해 로봇을 감지한다. 이를 위해 다음의 <script> 가 삽입된다.

<script src="https://{서비스도메인}/botprotection/fe/dd69345f-91a1-442f-b522-caddfb67c1dd.js/proxy/src/cache" type="text/javascript" charset="utf-8"></script>
enable (기본: false)

브라우저 정보를 활용한 로봇 탐지 기능 활성화

category

headless (기본: true) puppeteer와 같은 headless 브라우저 탐지

graphics (기본: true) 브라우저의 렌더링 정보를 활용한 Bot 탐지

audio (기본: true) 오디오 정보를 활용한 Bot 탐지

locale (기본: true) 시간대 및 언어 정보를 활용한 Bot 탐지

extention (기본: true) 브라우저 확장프로그램 정보를 활용한 Bot 탐지

cookie (기본: true) cookie 기능 동작 여부를 활용한 Bot 탐지

input (기본: true) 키보드, 마우스, 터치패널 등의 각종 입력디바이스를 활용한 Bot 탐지

system (기본: true) 시스템 정보(OS, 메모리, 파일시스템 등)를 활용한 Bot 탐지

flows

"flows": {
  "matchingList": [
    "name": "basic",
    "path": "/",
    "action": {
      "lv2": {"code": 403},
      "lv5": {"location": "/captcha?redirect=$URL"},
      "lv7": {"location": "/home"}
    }
  ]
}

matchingList

matchingList (기본: null)

name 패턴의 이름

path 매칭할 요청 경로

action
lv0 ~ lv10

code 응답 상태코드

location 리디렉션 경로. code 가 명기되지 않았다면 302 상태코드를 응답한다.