ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • IIS Web.config에 설정해주어야 하는 보안 서버 설정
    Development/ASP.NET 2020. 3. 7. 19:02

    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
    6
    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
    64
    <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

    댓글

2017 TIFY Team All Rights Reserved.