반응형

ASP.NET MVC 1.0, 2.0 응용 프로그램의 샘플 프로젝트에서 AccountController 내의 Return Url 처리시

Return Url을 변조 가능성을 잠재하고 있다.

이러한 문제를 해결하기 위해서 아래의 코드를 통해서 Return Url을 체크를 꼭 해야한다.

MVC 3.0 이상부터는 UrlHelper 클래스안에 IsLocalUrl 이라는 메소드가 정의가 되어있으며, 샘플 코드에도 자동으로

적용이 되어있다.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Routing;

namespace OpenRedirectionAttack.Code
{
    public class UrlHelperExtension
    {
        public bool IsLocalUrl(string url)
        {
            if (string.IsNullOrEmpty(url))
            {
                return false;
            }

            Uri absoluteUri;
            if (Uri.TryCreate(url, UriKind.Absolute, out absoluteUri))
            {
                return String.Equals(HttpContext.Current.Request.Url.Host, absoluteUri.Host, StringComparison.OrdinalIgnoreCase);
            }
            else
            {
                bool isLocal = !url.StartsWith("http:", StringComparison.OrdinalIgnoreCase) && !url.StartsWith("https://", StringComparison.OrdinalIgnoreCase) && Uri.IsWellFormedUriString(url, UriKind.Relative);
                return isLocal;
            }
        }
    }
}

반응형

+ Recent posts