- 필수 기능
- 시작하기
- Glossary
- 표준 속성
- Guides
- Agent
- 통합
- 개방형텔레메트리
- 개발자
- Administrator's Guide
- API
- Datadog Mobile App
- CoScreen
- Cloudcraft
- 앱 내
- 서비스 관리
- 인프라스트럭처
- 애플리케이션 성능
- APM
- Continuous Profiler
- 스팬 시각화
- 데이터 스트림 모니터링
- 데이터 작업 모니터링
- 디지털 경험
- 소프트웨어 제공
- 보안
- AI Observability
- 로그 관리
- 관리
",t};e.buildCustomizationMenuUi=t;function n(e){let t='
",t}function s(e){let n=e.filter.currentValue||e.filter.defaultValue,t='${e.filter.label}
`,e.filter.options.forEach(s=>{let o=s.id===n;t+=``}),t+="${e.filter.label}
`,t+=`ID: csharp-security/avoid-potential-ssrf
Language: C#
Severity: Error
Category: Security
CWE: 918
No description found
using System.Net.Http;
using Microsoft.AspNetCore.Mvc;
public class DocumentController : Controller
{
private readonly HttpClient _httpClient;
public DocumentController(HttpClient httpClient)
{
_httpClient = httpClient;
}
[HttpPost]
public async Task<IActionResult> FetchDocument(string documentUrl)
{
var response = await _httpClient.GetAsync(documentUrl); // Noncompliant
var content = await response.Content.ReadAsStringAsync();
return Content(content);
}
}
public class DocumentController : Controller
{
private readonly HttpClient _httpClient;
private readonly HashSet<string> _allowedHosts = new()
{
"api.company.com",
"documents.trusted.org"
};
public DocumentController(HttpClient httpClient)
{
_httpClient = httpClient;
}
[HttpPost]
public async Task<IActionResult> FetchDocument(string documentUrl)
{
if (!Uri.TryCreate(documentUrl, UriKind.Absolute, out Uri uri))
{
return BadRequest("Invalid URL format");
}
if (uri.Scheme != "https" || !_allowedHosts.Contains(uri.Host))
{
return BadRequest("URL not allowed");
}
var response = await _httpClient.GetAsync(documentUrl);
var content = await response.Content.ReadAsStringAsync();
return Content(content);
}
}