rspec/rules/S5144/csharp/rule.adoc
2020-06-30 17:16:12 +02:00

81 lines
2.1 KiB
Plaintext

include::../description.adoc[]
== Noncompliant Code Example
----
using System.IO;
using System.Net;
using Microsoft.AspNetCore.Mvc;
namespace WebApplicationDotNetCore.Controllers
{
public class RSPEC5144SSRFNoncompliantController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult ReadContentOfURL(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); // Noncompliant
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
return Content(responseFromServer);
}
}
}
----
== Compliant Solution
----
using System.Linq;
using System.IO;
using System.Net;
using Microsoft.AspNetCore.Mvc;
namespace WebApplicationDotNetCore.Controllers
{
public class RSPEC5144SSRFCompliantController : Controller
{
public IActionResult Index()
{
return View();
}
private readonly string[] whiteList = { "https://www.sonarsource.com" };
public IActionResult ReadContentOfURL(string url)
{
// Match the incoming URL against a whitelist
if (!whiteList.Contains(url))
{
return BadRequest();
}
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); // Noncompliant
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
return Content(responseFromServer);
}
}
}
----
include::../see.adoc[]