コード例 #1
0
        public async Task <bool> IsValidLinkAsync(string link)
        {
            var match = linkValidationExpression.Match(link);

            if (!match.Success)
            {
                return(false);
            }

            var domain = match.Groups[1].Value;

            return(linkValidationExpression.IsMatch(link) &&
                   await domainNameResolver.IsValidDomainAsync(domain));
        }
コード例 #2
0
        public async Task <bool> IsValidLinkAsync(string link)
        {
            if (link.Length > 1024)
            {
                return(false);
            }

            if (link.StartsWith("."))
            {
                return(false);
            }

            if (link.Count(x => x == '.') == 0)
            {
                return(false);
            }

            if (link.Contains(".."))
            {
                return(false);
            }

            var domain = link;

            if (domain.StartsWith("http://"))
            {
                domain = domain.Substring("http://".Length);
            }

            if (domain.StartsWith("https://"))
            {
                domain = domain.Substring("https://".Length);
            }

            var pathOrQueryIndex = domain.IndexOfAny(new[] { '?', '&', '/' });

            if (pathOrQueryIndex != -1)
            {
                domain = domain.Substring(0, pathOrQueryIndex);
            }

            return(await domainNameResolver.IsValidDomainAsync(domain));
        }