IIS를 사용하는 웹 서버의 경우, Web Application에 아래와 같은 설정을 추가로 해주시면 좋습니다.
1. 불필요한 소스 노출 방지
=> 커스텀 에러페이지를 사용하여 불필요한 소스 노출을 방지 할 수 있습니다.
2. https를 사용하는 사이트의 경우, 특별한 경우가 아닌이상 http로 접속 시 https로 Redirect 해주는 모듈을 적용시켜주어야 합니다.
=> 단, https가 바인딩된 사이트여야 하며, 반드시 http ReWrite 모듈이 설치되어 있어야 합니다.
3. POST, GET 요청 Method만 허용
=> DELETE, PUT 등의 Method는 허용하지 않도록 합니다.
4. 정적 리소스가 아닌 동적 리소스, 페이지 등은 캐싱 가능하지 않도록 설정해주어야 합니다.
5. 서버 정보등이 Response에 표시되지 않도록 해주어야 합니다.
=> Global.asax에 다음의 메서드를 추가하여 줍니다.
1 2 3 4 5 | protected void Application_PreSendRequestHeaders() { Response.Headers.Remove("Server"); Response.Headers.Remove("X-AspNet-Version"); } | cs |
6. SSL을 사용하고, 폼인증인 사이트의 경우 requireSSL 속성값을 true로 주어야 한다.
=> 단, SSL을 사용하지 않을경우 해당속성을 추가하면 안됨.
1 2 3 | <authentication mode="Forms"> <forms defaultUrl="Default.aspx" loginUrl="Login.aspx" name="formauth" protection="All" path="/" cookieless="UseDeviceProfile" slidingExpiration="true" requireSSL="true" timeout="100"/> </authentication> | cs |
7. IIS 서버에서 발행하는 쿠키는 반드시 ReadOnly 속성을 추가해주어야 한다.
=> 해당 옵션을 추가할 경우 javascript에서 document.cookies를 통하여 쿠키값 조작을 하지 못함
1 | <httpCookies httpOnlyCookies="true" /> | cs |
+) 추가로 쿠키값을 보는 방법은, 크롬 브라우져에서 보는것이 가장 편합니다.
F12 -> Application -> Cookies
- 적용 예
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | <system.webServer> <!--1. 커스텀에러페이지 적용 시작 --> <httpErrors errorMode="Custom" existingResponse="Replace"> <remove statusCode="403" subStatusCode="-1" /> <remove statusCode="404" subStatusCode="-1" /> <remove statusCode="405" subStatusCode="-1" /> <remove statusCode="406" subStatusCode="-1" /> <remove statusCode="412" subStatusCode="-1" /> <remove statusCode="500" subStatusCode="-1" /> <remove statusCode="501" subStatusCode="-1" /> <remove statusCode="502" subStatusCode="-1" /> <error statusCode="403" path="/CommonErrorPage.htm" prefixLanguageFilePath="" responseMode="ExecuteURL"/> <error statusCode="404" path="/CommonErrorPage.htm" prefixLanguageFilePath="" responseMode="ExecuteURL"/> <error statusCode="405" path="/CommonErrorPage.htm" prefixLanguageFilePath="" responseMode="ExecuteURL"/> <error statusCode="406" path="/CommonErrorPage.htm" prefixLanguageFilePath="" responseMode="ExecuteURL"/> <error statusCode="412" path="/CommonErrorPage.htm" prefixLanguageFilePath="" responseMode="ExecuteURL"/> <error statusCode="500" path="/CommonErrorPage.htm" prefixLanguageFilePath="" responseMode="ExecuteURL"/> <error statusCode="501" path="/CommonErrorPage.htm" prefixLanguageFilePath="" responseMode="ExecuteURL"/> <error statusCode="502" path="/CommonErrorPage.htm" prefixLanguageFilePath="" responseMode="ExecuteURL"/> </httpErrors> <!--1. 커스텀에러페이지 적용 시작 끝--> <!--2. http 접속 시 https로 Redirect 처리하는 모듈, 단 IIS ReWriteModule이 설치되어있지 않으면 오류가 납니다. https를 지원하는 사이트에만 적용 - 시작--> <rewrite> <rules> <rule name="HTTPS Redirefct" patternSyntax="Wildcard" stopProcessing="true"> <match url="*" /> <conditions logicalGrouping="MatchAny"> <add input="{HTTPS}" pattern="off" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" redirectType="Found" /> </rule> </rules> </rewrite> <!--2. http 접속 시 https로 Redirect 처리하는 모듈, 단 IIS ReWriteModule이 설치되어있지 않으면 오류가 납니다. https를 지원하는 사이트에만 적용 - 끝--> <!--3. POST,GET 요청 Method 이외에는 허용하지 않도록 설정 시작--> <security> <requestFiltering allowDoubleEscaping="false"> <requestLimits maxAllowedContentLength="4294967295" /> <verbs> <add verb="HEAD" allowed="false" /> <add verb="OPTIONS" allowed="false" /> <add verb="PUT" allowed="false" /> <add verb="DELETE" allowed="false" /> <add verb="TRACE" allowed="false" /> </verbs> <!-- 4GB --> </requestFiltering> </security> <!--3. POST,GET 요청 Method 이외에는 허용하지 않도록 설정 끝--> <!--4. 브라우저에서 캐시를 허용하지 않도록 하는 리스폰스 헤더값, 캐싱가능한 SSL페이지가 없도록처리하는 헤더, 단, 정적 리소스의 경우에는 해당 커스텀헤더를 Remove시켜주어야함 시작--> <httpProtocol> <customHeaders> <add name="X-UA-Compatible" value="IE=Edge" /> <add name="Cache-Control" value="no-cache,no-store" /> <add name="Pragma" value="no-cache" /> </customHeaders> </httpProtocol> <!--4. 브라우저에서 캐시를 허용하지 않도록 하는 리스폰스 헤더값, 캐싱가능한 SSL페이지가 없도록처리하는 헤더, 단, 정적 리소스의 경우에는 해당 커스텀헤더를 Remove시켜주어야함 끝--> </system.webServer> | cs |