Apache에서 HTTP_REFERER를 사용하여 Servlet 페이지에 대한 사용자 액세스 차단 방법

웹 애플리케이션이 성장함에 따라 민감한 페이지를 보호하고 무단 액세스로부터 보호할 필요성이 커집니다. 특히 자동화된 봇으로부터의 접근을 차단해야 한다면 더욱 그렇습니다. 특정 Servlet 페이지에 대해서 사용자가 직접 접근하지 못하도록 차단해야 하는 상황이지만 애플리케이션 서버를 수정할 수 없는 경우, Apache의 HTTP_REFERER 헤더를 활용할 수 있습니다.

이 포스트에서는 .htaccess 파일에서 HTTP_REFERER를 사용하여 액세스를 효과적으로 차단하는 방법을 탐구하며, 단계별로 나누어 명확한 예제를 제공하여 목표를 달성하는 데 도움을 드리겠습니다.

HTTP_REFERER 이해하기

HTTP_REFERER는 요청되는 자원에 연결된 웹페이지의 주소를 나타내는 HTTP 헤더입니다. 쉽게 말해, 사용자가 특정 페이지에 접근하기 전에 어디서 왔는지를 서버에 알려줍니다.

왜 액세스 차단을 위해 HTTP_REFERER를 사용해야 할까요?

  1. 보안 조치: 완벽하지는 않지만 무단 액세스에 대한 초기 장벽 역할을 합니다.
  2. 구현 용이성: 웹 서버를 제어할 수 있지만 애플리케이션 로직은 제어할 수 없는 경우, 실용적인 접근 방식입니다.
  3. 자동화된 요청 방지: 외부 소스나 봇의 직접 요청을 차단하는 것은 폼을 안전하게 유지하고 합법적인 방법을 통해서만 기능하도록 하기 위해 중요합니다.

.htaccess 재작성 규칙 설정하기

HTTP_REFERER를 기반으로 차단을 구현하려면 .htaccess 파일에 규칙을 추가해야 합니다. 다음은 효과적으로 규칙을 구성할 수 있는 방법입니다.

기본 재작성 규칙

먼저 다음과 같은 간단한 규칙으로 시작할 수 있습니다:

RewriteEngine on 

RewriteCond %{HTTP_REFERER} !^http://mywebaddress(.cl)?/.* [NC]
RewriteRule (servlet1|servlet2)/.+ - [F]

설명:

  • RewriteEngine on: 재작성 엔진을 활성화합니다.
  • RewriteCondHTTP_REFERER가 지정된 사이트와 일치하지 않는지 확인합니다.
  • RewriteRuleservlet1이나 servlet2 요청을 타겟으로 합니다.

향상된 재작성 규칙

하지만 사이트에서 발생하는 합법적인 요청만 허용하고 쿼리 문자열이 포함된 요청은 차단하고 싶다면 더 복잡한 논리가 필요합니다:

RewriteCond %{HTTP_REFERER} !^http://mywebaddress(.cl)?/.* [NC]
RewriteCond %{QUERY_STRING} ^.+$ [OR]
RewriteCond %{REQUEST_METHOD} ^POST$ [OR]
RewriteCond %{PATH_INFO} ^.+$
RewriteRule (servlet1|servlet2)\b - [F]

향상된 규칙의 분석:

  • 첫 번째 조건: 요청이 지정된 사이트 URL에서 오는 것이 아님을 확인합니다.
  • 두 번째 조건: 비어 있지 않은 쿼리 문자열을 가진 요청을 차단합니다.
  • 세 번째 조건: POST 요청을 직접 차단합니다.
  • 네 번째 조건: PATH_INFO가 있는 요청을 차단합니다.

이 조건들의 조합은 사이트 환경을 통해 탐색된 유효한 요청만이 지정된 Servlet 페이지에 도달할 수 있도록 보장합니다.

결론

HTTP_REFERER에 의존하는 것이 완벽한 보안을 제공하지는 않지만, 민감한 페이지에 대한 접근을 제한하는 효과적인 초기 조치입니다. 이 방법은 애플리케이션 수준의 제약으로 인해 포괄적인 변경이 불가능할 때 특히 유용합니다.

이 접근 방식은 보안 계층을 추가하지만 완전한 해결책은 아닙니다. 애플리케이션 및 사용자 기반이 성장함에 따라 서버 측 검증을 강화하고 추가적인 보안 조치를 고려하는 것이 항상 중요합니다.

이 방법을 시도해 보았거나 추가적인 통찰력이 있다면 댓글을 남겨주세요—여러분의 경험이 다른 사람들에게 유사한 문제를 해결하는 데 도움이 될 수 있습니다!