본문 바로가기
정보기술/일반

로봇에 의한 광고글 쓰기방지 기법

by fermi 2007. 7. 17.
http://www.nzeo.com/bbs/zboard.php?id=cgi_tip&page=2&sn1=&divpage=1&sn=off&ss=on&sc=off&keyword=방지&select_arrange=headnum&desc=asc&no=6246

로봇에 의한 광고글 쓰기방지 기법(write_ok.php 버그)  
김성진   (Homepage)  2004-08-31 16:55:03, 조회 : 5,333, 추천 : 4

write_ok.php를 살펴보면 13째줄 부근에 '편법을 이용한 글쓰기 방지'에서
서버운영 환경에 따라 $HTTP_HOST과 $HTTP_REFERER 값이 없음(NULL)으로 인하여 광고성 글이 올라갑니다.

일종의 버그이며 $HTTP_REFERER는 write_ok.php를 CALL한 직전의 URL이 포함되어 있으며
이 URL에 자신의 도메인이 포함되어 있지 않으면 로봇이 작동한것으로 인지합니다.

즉, getenv("HTTP_REFERER")의 값을 보면 http://도메인/zboard/write.php......일때 정상입니다.


따라서 $HTTP_HOST를 자신의 도메인(xxxxx.pe.kr 등)으로 입력하시고
$HTTP_REFERER에는 getenv("HTTP_REFERER")를 넣어주시면 광고글이 올라가지 않습니다.

// 편법을 이용한 글쓰기 방지(수정전)
        $mode = $HTTP_POST_VARS[mode];
        if(!eregi($HTTP_HOST,$HTTP_REFERER)) Error("정상적으로 글을 작성하여 주시기 바랍니다.");
        if(getenv("REQUEST_METHOD") == 'GET' ) Error("정상적으로 글을 쓰시기 바랍니다","");
        if(!$mode) $mode = "write";


// 편법을 이용한 글쓰기 방지(수정후)
        $mode = $HTTP_POST_VARS[mode];
        if(!eregi("도메인",getenv("HTTP_REFERER"))) Error("로봇이 들어왔나 보군요.");
        if(getenv("REQUEST_METHOD") == 'GET' ) Error("정상적으로 글을 쓰시기 바랍니다","");
        if(!$mode) $mode = "write";

67.180.207.89




제로보드
  도메인에 무엇을 넣어야 합니다.

우리 홈페이지는 http://ca.zo.ly 인데, ca.zo.ly 라고 입력해야 되요? 2004-08-31
17:51:38
  



레미짱
  확인은 안해 보았지만 regexp이므로
ca\.zo\.ly
라고 해야 되지 않을까요
escape를 추가해야 될 것 같습니다 2004-09-01
00:10:28
  



유종현
  도메인 포워딩을 받는 경우에는 어떻게 하죠? 실제 계정 주소를 써야하나요? 아니면 포워딩된 도메인 주소를 써야하나요? 2004-09-01
16:06:02
  



에지
  레미짱//
eregi 함수에서는 \를 붙이실 필요 없이 그냥 ca.zo.ly 라고 써도 잘 받아먹습니다.. (쿵!)
유종현// .com이나 .net, .co.kr이 아니라 .wo.to 같은 포워딩이라면 실제 계정주소를 써주셔야합니다. 2004-09-01
16:38:17
  



유종현
  그러니까 예를 들어 홈페이지가 news.com이라면 그냥 도메인을 쓰지만, 홈페이지가 서브도메인(2차도메인)인 경우 예를 들어 sports.news.com이라면 실제 계정주소를 써야한다는 말씀인가요? 2004-09-02
00:19:30
  



세바스챤_™
  테스트 결과 아무 소용 없습니다. 여전히 광고글 보란듯이 올라옵니다. 2004-09-03
11:08:20
  



산마루
  테스트 결과! 원격지에서 글을 올리는 경우는 차단이 됩니다.
테스트 파일을 만들어봤는데 참고하시기 바랍니다.
추천합니다.

테스트 파일 http://dorang.net/imsi/write.php 2004-10-21
08:21:31
  



정남주
  허....이거 해놓고 나니 저도 글을 못쓰는데요 ?

어떻게 된건지 ? 2004-12-18
02:59:59
  



kei
  잇 사람들이 -_-!!
포워딩 주소를 써놓고 안된다하면 어떡합니까?
실제 계정의 주소를 입력해야죠.
$HTTP_HOST에 무슨 값이 들어오는지 잘 생각해보면 알 수 있겠죠? 2004-12-19
12:56:06
  



깜보
  위와 같은 원리로 더 간단하게
if(!$HTTP_REFERER) Error("로봇이 들어왔나 보군요.");
라고만 넣어도 될듯도 하군요~~~~~^^* 2005-01-21
00:11:28