여기에 모든 해답 중 하나를 허용 다른 제도와의 URL (예 : file://
, ftp://
) 또는로 시작하지 않는 사람이 읽을 수있는 URL을 거부 http://
하거나 https://
(예 www.google.com
) 사용자 입력을 처리 할 때 좋은하지 않은 .
내가하는 방법은 다음과 같습니다.
public static bool ValidHttpURL(string s, out Uri resultURI)
{
if (!Regex.IsMatch(s, @"^https?:\/\/", RegexOptions.IgnoreCase))
s = "http://" + s;
if (Uri.TryCreate(s, UriKind.Absolute, out resultURI))
return (resultURI.Scheme == Uri.UriSchemeHttp ||
resultURI.Scheme == Uri.UriSchemeHttps);
return false;
}
용법:
string[] inputs = new[] {
"https://www.google.com",
"http://www.google.com",
"www.google.com",
"google.com",
"javascript:alert('Hack me!')"
};
foreach (string s in inputs)
{
Uri uriResult;
bool result = ValidHttpURL(s, out uriResult);
Console.WriteLine(result + "\t" + uriResult?.AbsoluteUri);
}
산출:
True https://www.google.com/
True http://www.google.com/
True http://www.google.com/
True http://google.com/
False