기본 가이드

이 가이드에서는 열린 웹 사이트를 구축하고 운영하는 것에 있어서 저해되는 기본적인 요소들을 진단, 해결하는 방법을 소개합니다.

로봇 배제 표준(robots.txt)을 제한적으로 사용하기

로봇 배제 표준이란?

로봇 배제 표준은 웹 사이트에 로봇이 접근하는 것을 방지하기 위한 규약으로, 일반적으로 접근 제한에 대한 내용을 robots.txt 파일에 기술합니다. 검색 엔진의 정보 수집용 로봇(이하 ‘검색 로봇’)은 웹 서버에 접근할 때 우선 서버의 최상위 디렉토리에서 robots.txt 파일을 불러내 문서에 대한 수집 허용 혹은 차단 여부를 확인합니다. 검색 로봇은 robots.txt 파일에 기술된 내용을 바탕으로 웹 사이트의 페이지를 수집합니다.

[중요!!!] robots.txt 파일은 보안 또는 개인정보 관리를 위한 도구가 아니며 검색 로봇의 수집범위를 정하는 규칙입니다.

로봇 배제 표준 사용의 예

  • 만약 robots.txt 파일이 존재하지 않는다면 웹 사이트는 기본으로 검색이 되도록 열려있는 상태입니다.
  • 문서 접근 완전 허용: 검색 로봇이 모든 문서에 접근하도록 허용.
    User-agent: *         # User-agent에서 *는 모든 로봇을 지칭합니다.
    Allow: /              # 모든 디렉토리에서 로봇의 접근을 허용합니다.
  • 문서 접근 완전 차단: 검색 로봇이 모든 문서에 접근하지 못하도록 차단.
    User-agent: *
    Disallow: /           # 모든 디렉토리에서 로봇의 접근을 차단합니다.
  • 문서 접근 부분 차단: 구글 검색 로봇에 대하여 /admin, /tmp 이하의 모든 페이지에 검색 로봇의 접근 차단.
    User-agent: Googlebot
    Disallow: /search
    Disallow: /tmp/

로봇 배제 표준 권장사항

  • 완전 차단으로 설정된 경우는 robots.txt의 내용을 삭제하는 것으로 정보의 개방이 가능합니다.
  • 부분 차단의 경우도 특별한 이유가 없으면 해제하는 것이 좋습니다. 다만, URL의 파라메터에 따라 새로운 링크를 무한히 생성하는 페이지가 있는 경우 부분 차단을 통해 검색 로봇의 소모적인 수집을 차단하는 것이 좋습니다.
  • 링크와 그 링크가 가리키는 문서를 무한히 생성하는 대표적인 예로는 검색엔진이나 포털의 검색결과 페이지가 있습니다. 각 검색엔진이나 포털은 검색 로봇이 이런 페이지들을 읽지 못하도록 차단합니다.
    # http://www.google.com/robots.txt의 예
    User-agent: *
    Disallow: /search
    ...
  • robots.txt 파일을 점검할 때에는 서브 도메인별로 점검해야 합니다. robots.txt 파일은 해당 호스트에만 적용되는 규칙이기 때문입니다. 예를 들어, http://www.example.com/의 웹문서는 http://www.example.com/robots.txt의 규칙이 적용되고 http://example.com/의 웹문서는 http://example.com/robots.txt의 규칙이 적용됩니다. 마찬가지로 http://test.example.com/은 http://test.example.com/robots.txt의 규칙이 적용됩니다. 따라서, robots.txt 파일을 제거하거나 수정할 경우 현재 서비스 중인 모든 서브 도메인에 대해서 동일한 조치를 취해야 일관성 있는 로봇 제어 규칙을 적용할 수 있습니다.

메타 태그(noindex, nofollow)로 무분별하게 검색을 차단하지 않기

noindex, nofollow란?

  • noindex: <meta name="robots" content="noindex">
    • 검색 엔진이 문서 정보를 알 수 있도록 안내하는 역할을 하는 메타 태그의 content 속성 중 noindex는 해당 페이지에 대한 색인을 제한하는 역할을 합니다.
    • 색인은 ‘인덱스’, 또는 ‘찾아보기’라고 정의하기도 하는데, 로봇이 색인을 한다는 것은 해당 페이지에 대한 간략한 정보를 요악, 저장하는 것을 의미합니다.
    • 로봇이 색인을 못하게 되면 해당 페이지에 대한 정보가 저장되지 않기 때문에 검색에서 제외됩니다.
  • nofollow: <meta name="robots" content="nofollow">
    • 메타 태그의 content 속성에 nofollow를 설정하게 되면, 검색 로봇이 해당 페이지에 수록된 링크를 따라갈 수 없도록 제한합니다.
    • nofollow 속성은 페이지 수준의 메타 태그에서 사용되며 페이지의 외부 링크에 대해 추적, 즉 크롤링 하지 않도록 검색 엔진에 지시하는 역할을 합니다.
    • nofollow 속성을 사용할 경우 검색 로봇은 타겟 링크를 따라가지 않기 때문에 효율적인 검색을 방해할 수 있습니다.

noindex, nofollow 사용의 예

  • <meta name="googlebot" content="noindex">
    • 구글 로봇을 제외한 다른 모든 로봇이 사이트의 페이지에 대해 색인을 생성하도록 허용합니다.
  • <meta name="robots" content="noindex">
    • 해당 페이지의 색인은 차단하고, 해당 페이지에 수록된 링크들을 따라갈 수 있도록 허용합니다.
  • <meta name="robots" content="nofollow">
    • 해당 페이지의 색인은 허용하나, 해당 페이지에 수록된 링크들은 따라갈 수 없도록 합니다.
  • <meta name="robots" content="noindex, nofollow">
    • 해당 페이지의 색인을 차단하고, 해당 페이지에 수록된 링크들 또한 따라갈 수 없도록 합니다.
  • noindex, nofollow 태그가 없을 경우 검색 로봇은 해당 페이지를 색인에 추가할 수 있고, 링크 또한 따라갈 수 있습니다.

메타 태그 사용의 권장 사항

  • 특별한 이유가 없다면 robots 메타 태그를 삭제하는 것이 좋습니다.
  • 직접 삭제할 수 없는 경우는 해당 웹사이트 또는 서비스의 담당자에게 문의하여 noindex나 nofollow 메타 태그를 삭제해 줄 것을 요청합니다.

HTTP 요청의 사용자 에이전트를 기반으로 검색을 차단하지 않기

사용자 에이전트(User-agent)란?

웹 서버와 웹 브라우저는 HTTP라는 표준 규격으로 통신하는데, 검색 로봇은 HTTP 요청(request)의 사용자 에이전트(User-agent) 항목에 식별 가능한 문자열을 붙여서 웹 서버에 전달합니다. 일반적으로 웹 서버 또는 웹 방화벽에서 사용자 에이전트의 문자열을 바탕으로 HTTP 요청을 차단할 수 있습니다. robots.txt나 메타 태그로 차단을 하지 않았는데도 검색 결과에 나타나지 않는다면 웹 서버나 웹 방화벽 단에서 검색 로봇의 사용자 에이전트 차단이 된 것은 아닌지 확인해 보는 것이 좋습니다.

주요 검색 로봇의 사용자 에이전트 문자열은 다음과 같습니다.

  • 구글
    • Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
  • 마이크로소프트 빙
    • Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
  • 네이버
    • Mozilla/4.0 (compatible; NaverBot/1.0; http://help.naver.com/customer_webtxt_02.jsp)
    • Yeti/1.0 (NHN Corp.; http://help.naver.com/robots/)
  • 바이두
    • Baiduspider+(+http://www.baidu.com/search/spider_jp.html)

진단 방법

가장 확실한 진단 방법은 웹 브라우저를 사용해 검색 로봇으로 가장하여 해당 사이트에 접근해 보는 것입니다. 다음과 같은 툴을 쓸 수 있습니다.

  • 인터넷 익스플로러: 도구 – 개발자 도구 – 사용자 에이전트 문자열 변경 – 사용자 지정
  • 파이어폭스: User Agent Switcher 부가기능
  • 크롬: User-agent Switcher 확장 프로그램
  • [추후에 각각의 자세한 사용 방법을 게시할 예정입니다.]

사용자 에이전트를 검색 엔진과 똑같이 하고 웹 사이트에 접근했을 때, 해당 사이트가 로봇을 차단하고 있는 경우 차단 메시지가 나오거나 아무런 페이지가 나오지 않습니다.

User-agent 차단 해결 방법

User-agent를 기준으로 HTTP 요청을 차단하는 경우는 주로 웹 방화벽이나 웹 서버단에서 이루어지고 소프트웨어마다 설정하는 방법이 다르므로 해당 사이트의 보안 담당자나 웹마스터에게 문의하여 수정해야 합니다. 아래의 예는 오픈 소스인 아파치(Apache)의 웹 방화벽인 ModSecurity를 사용하는 경우의 해결 방법입니다.

  • 아파치의 ModSecurity를 사용하는 경우
    • ModSecurity 환경설정 파일의 위치를 확인합니다. 한 예로 /usr/local/apache/conf/mod_security.conf 파일이 존재하는지 확인합니다.
    • 다음과 같이 검색 로봇의 User-agent를 차단하는 규칙이 있는지 확인하여 해당라인을 삭제해야 합니다.
      SecRule REQUEST_HEADERS:User-agent "NaverBot-1\.0" "msg:'Robot attack'"
      SecRule REQUEST_HEADERS:User-agent "Googlebot/2\.1" "msg:'Robot attack'"
      SecRule REQUEST_HEADERS:User-agent "Yahoo! Slurp" "msg:'Robot attack'"

검색 로봇의 IP주소를 기반으로 검색을 차단하지 않기

웹 서버의 네트워크 설정에서 검색 로봇의 IP를 기준으로 차단하는 경우가 있습니다. 웹마스터나 해당 웹 서버의 네트워크 또는 보안 담당자가 아닌 외부에서 IP기반 차단여부를 확인하는 것은 쉽지 않습니다. 앞에서 설명한 차단 요소가 없는데도 검색 결과에 해당 웹사이트의 문서들이 잘 나타나지 않으면 IP기반 차단을 의심해 볼 수 있습니다. 그렇지만 다른 원인으로 검색 결과에 문서들이 잘 나타나지 않는 경우도 있으니 결정적인 진단방법은 아닙니다.

IP기반 차단 방식의 문제점

피치못할 이유가 있어 검색 로봇을 반드시 차단해야 하는 경우, IP 기반 차단 방식이 손쉬워 보이나 효과적인 차단 방식은 아닙니다. 검색 로봇의 IP 대역이 변할 수 있기 때문에 IP를 기반으로 차단하는 경우 검색 로봇을 완전히 차단하지 못합니다. 검색 로봇 차단의 표준적인 방식은 robots.txt나 noindex, nofollow등의 로봇 메타 태그를 사용하는 것입니다.

검색 로봇 IP 차단 해결 방법

해당 사이트의 웹 방화벽 또는 네트워크 보안담당자와 상의하여 IP기준으로 검색 로봇을 차단하는 규칙을 해제하는 것이 좋습니다.

GET/POST 방식을 올바르게 사용하여 URL 접근성을 늘리기

과도한 POST 방식 사용의 문제점

  • 주로 검색을 하여 접근하는 사전, 게시판 등의 데이터베이스 기반의 웹 사이트가 POST 방식만을 지원하여 검색이 안 되는 경우가 있습니다. 이를테면, 영화 정보 사이트에서 ‘태극기 휘날리며’와 ‘반지의 제왕’ 처럼 다른 두 영화정보를 찾았는데 결과 URL이 동일한 경우가 이런 경우입니다. 검색 로봇은 링크(URL)를 따라 접근할 수 있는 페이지만을 색인합니다. (GET/POST 메소드의 차이점에 대해서는 자주 하는 질문을 참고하세요.) 따라서, POST 방식만을 지원하는 데이터베이스는 검색 로봇이 접근할 수 없습니다.

진단 및 해결 방법

  • 이 문제의 진단을 위해서는 게시판, 사전 등의 사이트에서 검색을 하여 검색 결과 페이지 또는 게시물 보기 페이지로 이동합니다. 이 때 웹 브라우저 주소창의 주소(URL)를 복사하여 다른 창(또는 탭)의 주소창에 입력하여 원래의 페이지가 나타나는지 확인합니다. 원래의 페이지가 나타나지 않는다면, 각각의 다른 콘텐츠를 구별해줄 수 있는 정보가 URL에 포함되어있지 않고 POST 방식으로 전달되어있는 경우입니다. 이런 페이지들은 (비의도적이었겠지만) 검색 차단으로 판단할 수 있습니다.
    • 표준 국어 대사전 사이트를 예로 들어보겠습니다. 단어(예: ‘고향’)를 검색한 후에 ‘고향’에 대한 단어 설명 페이지의 URL을 복사하여 새로운 웹 브라우저 창에서 입력해봅니다. 방금 검색해서 보았던 ‘고향’에 대한 설명이 나오지 않을 것입니다. 이는 POST 방식만을 지원하여 URL로는 접근이 안 되기 때문입니다.
  • 구체적인 해결방법은 각 사이트의 구현방법에 따라 달라집니다. 해당 사이트를 제작한 웹 개발사나 담당부서에 문의하여 GET 방식(URL)으로도 같은 페이지를 접근할 수 있도록 수정합니다.
  • 하지만 URL에 무분별적으로 정보를 포함하여 보안 문제를 야기하는 경우가 종종 있습니다. 보안 가이드에서 이 문제를 설명합니다.