-
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에 다음의 메서드를 추가하여 줍니다.
123456protected void Application_PreSendRequestHeaders(){Response.Headers.Remove("Server");Response.Headers.Remove("X-AspNet-Version");}cs 6. SSL을 사용하고, 폼인증인 사이트의 경우 requireSSL 속성값을 true로 주어야 한다.
=> 단, SSL을 사용하지 않을경우 해당속성을 추가하면 안됨.
123<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
- 적용 예
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364<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 'Development > ASP.NET' 카테고리의 다른 글
Http Module을 이용한 Custom Authentication(커스텀인증) 구현 (0) 2020.06.06 사파리에서 한글 첨부파일명이 깨질 경우 (0) 2020.05.09 ClientSide <-> ServerSide간 호환되는 비대칭키 알고리즘 로직 (0) 2020.03.21 페이지 수명 주기 (0) 2019.07.07 댓글