워드프레스에서 특정한 SQL 인젝션 시도와 같이 위험한 파라메터를 차단하는 방법에는 여러 가지가 있습니다. 제시된 파라메터는 SQL 인젝션 공격을 시도하는 것으로 보입니다. 이를 방지하기 위한 몇 가지 방법을 소개하겠습니다.
- 웹 어플리케이션 방화벽(WAF) 사용: 워드프레스 사이트를 보호하는 가장 효과적인 방법 중 하나는 WAF를 사용하는 것입니다. WAF는 악의적인 트래픽과 공격을 차단하도록 설계되었습니다. 예를 들어, Cloudflare나 Sucuri와 같은 서비스는 SQL 인젝션 공격을 자동으로 차단할 수 있습니다.
- 보안 플러그인 설치: 여러 워드프레스 보안 플러그인이 SQL 인젝션과 같은 공격을 막는 기능을 제공합니다. 예를 들어, ‘Wordfence Security’나 ‘iThemes Security’는 악의적인 요청을 감지하고 차단하는 기능을 제공합니다.
- .htaccess 파일 수정: 웹서버의 설정 파일인 .htaccess를 수정하여 특정 유형의 요청을 차단할 수 있습니다. 예를 들어, 다음과 같은 규칙을 추가하여 SQL 인젝션을 시도하는 쿼리 문자열을 포함한 요청을 차단할 수 있습니다
1 2 3 4 5 |
RewriteEngine On RewriteCond %{QUERY_STRING} (\%27)|(\')|(\-\-)|(\%23)|(#) RewriteRule .* - [F] |
이 규칙은 일반적인 SQL 인젝션 패턴을 포함한 요청을 찾아내서 차단합니다.
RewriteEngine On
이 라인은 URL 재작성 엔진을 활성화합니다. Apache 웹 서버는 .htaccess
파일에서 URL 재작성 규칙을 적용하기 위해 RewriteEngine을 사용합니다. 이 설정이 켜져 있어야 나머지 재작성 규칙이 작동합니다.
RewriteCond %{QUERY_STRING} (%27)|(‘)|(–)|(%23)|(#)
이 라인은 조건을 설정하는 것으로, 특정 조건이 만족될 때만 아래의 RewriteRule이 적용됩니다. 여기서 %{QUERY_STRING}
은 요청된 URL의 쿼리 문자열을 나타냅니다. 괄호 안의 패턴은 차단하려는 특정 문자열을 포함하는지 확인합니다.
(\%27)
:%27
은 URL 인코딩된 아포스트로피(‘)입니다. 이를 포함하는 쿼리 문자열을 차단합니다.(\')
: 직접 입력된 아포스트로피(‘)를 포함하는 쿼리 문자열을 차단합니다.(\-\-)
: SQL 주석 시작 문자열--
를 포함하는 쿼리 문자열을 차단합니다.(\%23)
:%23
은 URL 인코딩된 샵(#) 기호입니다. 이를 포함하는 쿼리 문자열을 차단합니다.(#)
: 직접 입력된 샵(#) 기호를 포함하는 쿼리 문자열을 차단합니다.
이 패턴들은 SQL 인젝션 공격에서 자주 사용되는 문자들을 포함하고 있습니다.
RewriteRule .* – [F]
이 라인은 조건이 만족될 때 적용되는 규칙을 정의합니다.
.*
: 모든 요청을 의미합니다.-
: 재작성할 URL이 없음을 나타냅니다. 즉, URL을 변경하지 않습니다.[F]
: Forbidden을 의미합니다. 조건이 만족되면 서버는 403 Forbidden 상태 코드를 반환하고 요청을 차단합니다.
종합 설명
이 .htaccess
설정은 다음과 같은 요청을 차단합니다:
- URL 쿼리 문자열에 URL 인코딩된 아포스트로피(
%27
)가 포함된 경우 - URL 쿼리 문자열에 직접 입력된 아포스트로피(
'
)가 포함된 경우 - URL 쿼리 문자열에 SQL 주석 시작 문자열(
--
)이 포함된 경우 - URL 쿼리 문자열에 URL 인코딩된 샵 기호(
%23
)가 포함된 경우 - URL 쿼리 문자열에 직접 입력된 샵 기호(
#
)가 포함된 경우
이를 통해 SQL 인젝션 공격을 시도하는 악의적인 요청을 차단할 수 있습니다. .htaccess
파일을 수정한 후, 웹 서버를 다시 시작하거나 구성을 새로 고쳐야 할 수 있습니다. 이를 통해 변경 사항이 적용됩니다.
1 2 3 4 5 6 7 |
RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^https://www.auctionpro.co.kr [NC] RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?google.com [NC] RewriteRule .(jpg|jpeg|png|gif)$ – [NC,F,L] |
위의 .htaccess
파일 내용은 특정 사이트에서만 이미지 파일을 참조할 수 있도록 제한하는 설정입니다. 각 라인의 의미를 자세히 설명하겠습니다.
RewriteEngine on
이 라인은 URL 재작성 엔진을 활성화합니다. Apache 웹 서버는 .htaccess
파일에서 URL 재작성 규칙을 적용하기 위해 RewriteEngine을 사용합니다. 이 설정이 켜져 있어야 나머지 재작성 규칙이 작동합니다.
RewriteCond %{HTTP_REFERER} !^$
이 라인은 HTTP_REFERER 헤더가 비어 있지 않을 때만 조건을 만족하도록 합니다. HTTP_REFERER는 사용자가 이전에 방문한 페이지의 URL을 나타냅니다. !^$
는 빈 문자열이 아닌 경우를 의미합니다.
RewriteCond %{HTTP_REFERER} !^https://www.auctionpro.co.kr [NC]
이 라인은 HTTP_REFERER 헤더가 https://www.auctionpro.co.kr
로 시작하지 않는 경우 조건을 만족하게 합니다. [NC]
는 대소문자를 구분하지 않도록 합니다 (No Case-sensitive).
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?google.com [NC]
이 라인은 HTTP_REFERER 헤더가 http://www.google.com
, https://www.google.com
, http://google.com
, 또는 https://google.com
로 시작하지 않는 경우 조건을 만족하게 합니다. http(s)?
는 http
또는 https
를 의미하며, (www\.)?
는 www.
가 있을 수도 있고 없을 수도 있음을 의미합니다. [NC]
는 대소문자를 구분하지 않도록 합니다.
RewriteRule .(jpg|jpeg|png|gif)$ – [NC,F,L]
이 라인은 조건이 만족될 때 적용되는 규칙을 정의합니다.
\.(jpg|jpeg|png|gif)$
: URL이.jpg
,.jpeg
,.png
, 또는.gif
로 끝나는 경우를 의미합니다. 이는 이미지 파일을 대상으로 합니다.–
: 재작성할 URL이 없음을 나타냅니다. 즉, URL을 변경하지 않습니다.[NC]
: 대소문자를 구분하지 않도록 합니다 (No Case-sensitive).[F]
: Forbidden을 의미합니다. 조건이 만족되면 서버는 403 Forbidden 상태 코드를 반환하고 요청을 차단합니다.[L]
: 이 규칙이 마지막 규칙임을 나타냅니다. 이 규칙이 적용되면 더 이상의 재작성 규칙을 적용하지 않습니다.
종합 설명
이 .htaccess
설정은 이미지 파일 (.jpg
, .jpeg
, .png
, .gif
)에 대한 요청을 차단합니다. 다만, 다음 조건에 해당하는 경우는 예외입니다:
- HTTP_REFERER 헤더가 비어 있는 경우 (직접 URL을 입력하거나 북마크에서 접근하는 경우)
- HTTP_REFERER 헤더가
https://www.auctionpro.co.kr
로 시작하는 경우 - HTTP_REFERER 헤더가
http(s)://(www.)?google.com
로 시작하는 경우
이를 통해 이미지 파일이 특정 사이트에서만 참조될 수 있도록 제한하여 무단 링크를 방지할 수 있습니다. .htaccess
파일을 수정한 후, 웹 서버를 다시 시작하거나 구성을 새로 고쳐야 할 수 있습니다. 이를 통해 변경 사항이 적용됩니다.
4o
IIS 에서도 작동하게 하는 방법ChatGPT
IIS(Internet Information Services)에서 위와 같은 리퍼러 기반 이미지 차단 규칙을 설정하려면 URL Rewrite 모듈을 사용해야 합니다. 이 모듈을 사용하면 웹 서버에 대한 URL 재작성 규칙을 설정할 수 있습니다. 다음은 IIS에서 유사한 기능을 설정하는 방법입니다.
1. URL Rewrite 모듈 설치
IIS에 URL Rewrite 모듈이 설치되어 있어야 합니다. 설치되어 있지 않다면 Microsoft의 공식 사이트를 통해 다운로드하고 설치할 수 있습니다.
2. web.config 파일 수정
사이트의 루트 디렉토리에 있는 web.config
파일에 다음 내용을 추가합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
xml코드 복사<code><configuration> <system.webServer> <rewrite> <rules> <rule name="Block image hotlinking" stopProcessing="true"> <match url=".*\.(jpg|jpeg|png|gif)$" ignoreCase="true" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{HTTP_REFERER}" pattern="^$" negate="true" /> <add input="{HTTP_REFERER}" pattern="^https://www.auctionpro.co.kr" negate="true" ignoreCase="true" /> <add input="{HTTP_REFERER}" pattern="^http(s)?://(www\.)?google.com" negate="true" ignoreCase="true" /> </conditions> <action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Hotlinking forbidden" /> </rule> </rules> </rewrite> </system.webServer> </configuration> |
설명
<match url=".*\.(jpg|jpeg|png|gif)$" ignoreCase="true" />
: URL이.jpg
,.jpeg
,.png
, 또는.gif
로 끝나는 경우를 매칭합니다.<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
: 모든 조건이 만족해야만 규칙이 적용되도록 설정합니다.<add input="{HTTP_REFERER}" pattern="^$" negate="true" />
: HTTP_REFERER가 비어 있지 않은 경우에만 조건을 만족합니다.<add input="{HTTP_REFERER}" pattern="^https://www.auctionpro.co.kr" negate="true" ignoreCase="true" />
: HTTP_REFERER가https://www.auctionpro.co.kr
로 시작하지 않는 경우에만 조건을 만족합니다.<add input="{HTTP_REFERER}" pattern="^http(s)?://(www\.)?google.com" negate="true" ignoreCase="true" />
: HTTP_REFERER가http(s)://(www.)?google.com
으로 시작하지 않는 경우에만 조건을 만족합니다.
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Hotlinking forbidden" />
: 조건이 만족되면 403 Forbidden 응답을 반환합니다.
3. IIS 재시작
web.config
파일을 수정한 후 IIS를 재시작하거나 웹사이트를 재시작하여 변경 사항이 적용되도록 합니다.
이 설정을 통해 특정 리퍼러에서만 이미지를 참조할 수 있게 되어, 다른 사이트에서 무단으로 이미지를 링크하는 것을 방지할 수 있습니다.
RewriteEngine On RewriteCond %{QUERY_STRING} (%27)|(‘)|(–)|(%23)|(#) RewriteRule .* – [F]
IIS 에서 세팅ChatGPT
IIS(Internet Information Services)에서 위와 같은 URL 재작성 규칙을 설정하려면 URL Rewrite 모듈을 사용해야 합니다. 이 모듈을 통해 Apache의 .htaccess
파일에서 설정한 것과 유사한 규칙을 만들 수 있습니다. 다음은 IIS에서 쿼리 문자열에 특정 패턴을 포함하는 요청을 차단하는 방법입니다.
1. URL Rewrite 모듈 설치
IIS에 URL Rewrite 모듈이 설치되어 있어야 합니다. 설치되어 있지 않다면 Microsoft의 공식 사이트에서 다운로드하고 설치할 수 있습니다.
2. web.config 파일 수정
사이트의 루트 디렉토리에 있는 web.config
파일에 다음 내용을 추가합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<configuration> <system.webServer> <rewrite> <rules> <rule name="Block SQL Injection Patterns" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAny" trackAllCaptures="false"> <add input="{QUERY_STRING}" pattern="%27" /> <add input="{QUERY_STRING}" pattern="\'" /> <add input="{QUERY_STRING}" pattern="\-\-" /> <add input="{QUERY_STRING}" pattern="%23" /> <add input="{QUERY_STRING}" pattern="#" /> </conditions> <action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" /> </rule> </rules> </rewrite> </system.webServer> </configuration> |
설명
<match url=".*" />
: 모든 URL을 매칭합니다.<conditions logicalGrouping="MatchAny" trackAllCaptures="false">
: 하나라도 조건이 만족되면 규칙이 적용되도록 설정합니다.<add input="{QUERY_STRING}" pattern="%27" />
: 쿼리 문자열에%27
(URL 인코딩된 아포스트로피)이 포함된 경우.<add input="{QUERY_STRING}" pattern="\'" />
: 쿼리 문자열에 아포스트로피('
)가 포함된 경우.<add input="{QUERY_STRING}" pattern="\-\-" />
: 쿼리 문자열에 SQL 주석 시작 문자열(--
)이 포함된 경우.<add input="{QUERY_STRING}" pattern="%23" />
: 쿼리 문자열에%23
(URL 인코딩된 샵 기호)이 포함된 경우.<add input="{QUERY_STRING}" pattern="#" />
: 쿼리 문자열에 샵 기호(#
)가 포함된 경우.
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
: 조건이 만족되면 403 Forbidden 응답을 반환합니다.
3. IIS 재시작
web.config
파일을 수정한 후 IIS를 재시작하거나 웹사이트를 재시작하여 변경 사항이 적용되도록 합니다.
이 설정을 통해 쿼리 문자열에 특정 패턴이 포함된 요청을 차단할 수 있으며, 이는 SQL 인젝션 공격을 방지하는 데 도움이 됩니다.
%23 %27 문자는?ChatGPT
IIS에서 %23
(URL 인코딩된 #) 및 %27
(URL 인코딩된 ‘)와 같은 URL 인코딩된 문자를 포함한 쿼리 문자열을 차단하는 방법을 web.config
파일을 통해 설정할 수 있습니다. 이를 위해 URL Rewrite 모듈을 사용하여 특정 패턴을 감지하고 해당 요청을 차단합니다.
다음은 이를 구현하기 위한 web.config
파일의 설정 예시입니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<configuration> <system.webServer> <rewrite> <rules> <rule name="Block SQL Injection Patterns" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAny" trackAllCaptures="false"> <add input="{QUERY_STRING}" pattern="%2527" /> <add input="{QUERY_STRING}" pattern="%27" /> <add input="{QUERY_STRING}" pattern="\'" /> <add input="{QUERY_STRING}" pattern="\-\-" /> <add input="{QUERY_STRING}" pattern="%2523" /> <add input="{QUERY_STRING}" pattern="%23" /> <add input="{QUERY_STRING}" pattern="#" /> </conditions> <action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" /> </rule> </rules> </rewrite> </system.webServer> </configuration> |
설명
<match url=".*" />
: 모든 URL을 매칭합니다.<conditions logicalGrouping="MatchAny" trackAllCaptures="false">
: 하나라도 조건이 만족되면 규칙이 적용되도록 설정합니다.<add input="{QUERY_STRING}" pattern="%2527" />
: 쿼리 문자열에 이중 URL 인코딩된%27
(즉,%2527
)이 포함된 경우.<add input="{QUERY_STRING}" pattern="%27" />
: 쿼리 문자열에 URL 인코딩된%27
(아포스트로피)이 포함된 경우.<add input="{QUERY_STRING}" pattern="\'" />
: 쿼리 문자열에 아포스트로피('
)가 포함된 경우.<add input="{QUERY_STRING}" pattern="\-\-" />
: 쿼리 문자열에 SQL 주석 시작 문자열(--
)이 포함된 경우.<add input="{QUERY_STRING}" pattern="%2523" />
: 쿼리 문자열에 이중 URL 인코딩된%23
(즉,%2523
)이 포함된 경우.<add input="{QUERY_STRING}" pattern="%23" />
: 쿼리 문자열에 URL 인코딩된%23
(샵 기호)이 포함된 경우.<add input="{QUERY_STRING}" pattern="#" />
: 쿼리 문자열에 샵 기호(#
)가 포함된 경우.
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Forbidden" />
: 조건이 만족되면 403 Forbidden 응답을 반환합니다.
이중 URL 인코딩
특정 상황에서는 %27
(아포스트로피)와 %23
(샵 기호)가 이중으로 인코딩된 %2527
및 %2523
으로 나타날 수 있습니다. 이는 %
문자가 다시 URL 인코딩되어 %25
로 변환되었기 때문입니다. 이 경우에도 차단할 수 있도록 패턴에 이중 인코딩된 값을 추가했습니다.
적용 방법
web.config
파일을 수정하여 위의 내용을 추가합니다.- 변경 사항을 적용하기 위해 IIS를 재시작하거나 해당 웹사이트를 재시작합니다.
이 설정을 통해 쿼리 문자열에 특정 패턴이 포함된 요청을 차단하여 SQL 인젝션 공격을 방지할 수 있습니다.