我们的解决方案中存在问题(我们正在使用 .net core),SNYK 漏洞扫描程序向我们显示,我们在以下代码中存在服务器端请求伪造 (SSRF) 漏洞:
public async Task<string> GetHtml(string urlContent)
{
HttpClient httpClient = new HttpClient();
try
{
urlContent = Uri.EscapeUriString(urlContent);
using (httpClient)
{
httpClient.DefaultRequestHeaders.TryAddWithoutValidation(HeaderAccept, HeaderAcceptValue);
httpClient.DefaultRequestHeaders.TryAddWithoutValidation(HeaderAcceptEncoding, HeaderAcceptEncodingValue);
httpClient.DefaultRequestHeaders.TryAddWithoutValidation(HeaderUserAgent, HeaderUserAgentValue);
httpClient.DefaultRequestHeaders.TryAddWithoutValidation(HeaderAcceptCharset, HeaderAcceptCharsetValue);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
var response = await httpClient.GetAsync(new Uri(TextHelper.RedirectUrlNull(urlContent)));
问题应该是对 urlContent 变量的引用以及它与响应变量的关系,但我不知道如何缓解该漏洞。我感谢你的帮助。
如果不知道
GetHtml
从哪里获取其参数(URL),我们无法确认它是否是一个漏洞。
例如,如果用户可以任意提供 URL,则这将是一个漏洞。在这种情况下,为了缓解这种情况,您必须提前知道安全 URL 的列表或模式,以验证
urlContent
。