ASP.NET MVC security 대응 예시

ASP.NET MVC security 대응 예시

1. Cookie 설정

Web.config

<system.web>
    <!-- 기존 설정 -->
    <httpCookies httpOnlyCookies="true" requireSSL="true" />
</system.web>

SSL의 경우에만 Cookie를 유효화(예) http로 접속할 경우엔 Cookie가 무효이므로 유저 로긴 불가)

2. Response Header 설정

Web.config

<system.webServer>
    <!-- 기존 설정 -->
    <httpProtocol>
      <customHeaders>
        <remove name="Cache-Control" />
        <remove name="X-Powered-By" />
        <add name="X-Frame-Options" value="SAMEORIGIN" />
        <add name="X-XSS-Protection" value="1; mode=block" />
        <add name="X-Content-Type-Options" value="nosniff" />
        <add name="Cache-Control" value="no-cache, no-store, must-revalidate" />
        <add name="Pragma" value="no-cache" />
      </customHeaders>
    </httpProtocol>
</system.webServer>

[X-Frame-Options:SAMEORIGIN]

iframe의 제한을 자기자신과 생산처가 같은 프레임 안이었을 경우에만 가능하도록 제한

[X-XSS-Protection:1; mode=block]

XSS필터를 유효화

[X-Content-Type-Options:nosniff]

Web브라우저에 의한 「Content-Type」의 예측을 회피하여 브라우저에 의한 의도하지 않은 동작을 회피

3. Response Header의 X-Frame-Options의 자동 출력의 회피

ASP.NET MVC 5 では X-Frame-Options が自動で出力される時がある

[X-Frame-Options:SAMEORIGIN]을 적용하고 싶지 않을 경우의 설정(물론 2의 [X-Frame-Options:SAMEORIGIN] 설정이 없는것이 전제조건. 2를 설정했을 경우 2의 설정이 우선시 된다)

Global.asax.cs

using System.Web.Helpers;
using System.Security.Claims;

protected void Application_Start()
{
    // 기존 코드
    // .....

    AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;
    AntiForgeryConfig.SuppressXFrameOptionsHeader = true;
}

4. 브라우저 캐시의 무효화

ActionFilterAttribute를 계승하는 클래스인 OnActionExecuted에 캐시 무효화를 위한 코드를 추가

FilterConfig.cs

public class FilterConfig
{
	public static void RegisterGlobalFilters(GlobalFilterCollection filters)
	{
		filters.Add(new CacheAttribute());
	}
}

CacheAttribute.cs

public class CacheAttribute: ActionFilterAttribute
{
	public override void OnActionExecuted(ActionExecutedContext filterContext)
	{
		var response = filterContext.HttpContext.Response;
		response.Cache.SetCacheability(HttpCacheability.NoCache);

		base.OnActionExecuted(filterContext);
	}
}

Web.config에서 대응할 경우(2와 3을 양쪽 다 대응할 경우의 예)

<httpProtocol>
  <customHeaders>
	<remove name="Cache-Control" />
	<remove name="X-Powered-By" />
	<add name="X-Frame-Options" value="SAMEORIGIN" />
	<add name="X-XSS-Protection" value="1; mode=block" />
	<add name="X-Content-Type-Options" value="nosniff" />
	<add name="Cache-Control" value="no-cache, no-store, must-revalidate" />
	<add name="Pragma" value="no-cache" />
  </customHeaders>
</httpProtocol>

설정이 정상적으로 동장하는지 확인

005

참고 사이트

Pie's Tech Note

생계형 개발자의 메모장

comments powered by Disqus

    rss facebook twitter github youtube mail spotify instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora