웹 페이지에 있는 데이터를 읽어와서 그 데이터를 가공해서 우리가 원하는 데이터를 뽑아내는 과정을 파싱이라고 합니다. 보통 파싱은 검색 엔진에서의 실시간 검색어 데이터를 가져온다거나 혹은 주식의 현재 주가를 알아내는 등의 과정에서 많이 쓰입니다.
파싱 과정에서 중요한 것은 웹페이지에 있는 데이터를 가져오는 일입니다. 왜냐하면 데이터를 가져오지 못한다면 데이터를 가공하는 과정을 구현했더라도 쓸모가 없기 때문입니다.
대다수의 웹 페이지들은 파싱 프로그램을 좋아하지 않기 때문에 파싱을 하는 프로그램인지 체크를 하고 맞는 경우에는 에러 페이지를 보여주는 일을 합니다. 왜냐하면 파싱 프로그램을 사용하게 되면 페이지에서 광고를 보여줄 수 없기 때문에 수익이 생기지 않고, 트래픽만 잡아먹기 때문입니다.
보통 체크를 하는 방법에는 여러 가지가 있지만 그 중에서 대표적인 몇 가지 경우만 살펴보도록 하겠습니다.
1. User-Agent 체크
브라우저에 의한 요청인지를 확인할 수 있는 가장 간단한 방법입니다. 하지만 User-Agent의 값은 쉽게 바꾸어서 요청으로 보낼 수 있기 때문에 약간의 프로그래밍 지식이 있는 사람이라면 쉽게 우회를 할 수 있습니다.
2. Referer 체크
보통 download.php와 같이 파일을 다운로드 할 수 있게 할 때 사용할 수 있는 방법입니다. 보통 브라우저에서 링크를 클릭하면 클릭하기 전의 URL 정보가 Referer로 전달이 됩니다. 그러므로 Referer를 체크하면 어느 정도 비정상적인 접근을 걸러낼 수 있습니다.
하지만 Referer의 경우에도 쉽게 바꾸어서 요청으로 보낼 수 있으므로 완전한 대응 방식이 될 수는 없습니다.
3. 난독화 된 Javascript 이용하기
Python의 경우에는 웹페이지 요청을 보냈을 때 Javascript에서 DOM 구조를 변환시키는 코드가 있다고 해도 이것이 적용되지 않는 결과만 가져올 수 있습니다. 즉 Javascript로 특정 알고리즘를 이용해서 cookie를 생성하고, 그 cookie 정보가 있는지 여부를 판단하고 없는 경우에는 에러 페이지를 보여주는 방식으로 구현을 할 수 있습니다. Cloudflare가 이와 비슷한 방법을 사용하고 있습니다.
난독화를 사용하라는 이유는 난독화를 하지 않으면 쉽게 코드를 분석해서 우회를 할 수 있는 알고리즘을 만들 수 있기 때문에 이 과정을 오래 걸리게 하기 위해서입니다.
다만 능력자들에 의해서 각 언어별로 Javascript를 실행할 수 있도록 하는 라이브러리가 만들어진 경우가 있기 때문에 이런 경우에는 막을 수 있는 방법이 없습니다.
4. 요청 시간 간격 체크하기
짧은 시간에 비정상적으로 많은 요청이 발생한다면 정상적인 요청이 아닌 것을 알 수 있습니다. 즉, 1초에 10번 이상의 요청이 발생한다면 해당하는 IP나 혹은 계정을 일정 시간동안 차단을 하는 방식을 취할 수 있습니다.
이렇게 해서 웹 페이지 파싱을 어렵게 하는 방법에 대해서 살펴보았습니다. 위에서 언급한 방법 말고도 다양한 방법이 있을 수 있지만, 파싱을 완벽하게 막는 방법은 존재할 수 없다는 것을 알고 계셔야 합니다.
'컴퓨터 > 참고 사이트 및 팁' 카테고리의 다른 글
SQL Injection 공부하기 (0) | 2016.08.31 |
---|---|
mod_rewrite가 적용이 안될 경우 (0) | 2016.08.13 |
Sublime text shortcuts and tips (0) | 2016.06.17 |
Github 소스코드 볼 때 탭 사이즈 조절 (1) | 2016.04.10 |
Emmet 참고자료 (0) | 2016.03.22 |