rspec/rules/S5144/csharp/rule.adoc

98 lines
2.4 KiB
Plaintext
Raw Normal View History

2020-06-30 12:50:28 +02:00
include::../description.adoc[]
== Noncompliant Code Example
2022-02-04 17:28:24 +01:00
[source,csharp]
2020-06-30 12:50:28 +02:00
----
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);
2020-06-30 12:50:28 +02:00
string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
return Content(responseFromServer);
}
}
}
----
== Compliant Solution
2022-02-04 17:28:24 +01:00
[source,csharp]
2020-06-30 12:50:28 +02:00
----
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 = { "www.example.com", "example.com" };
2020-06-30 12:50:28 +02:00
public IActionResult ReadContentOfURL(string url)
{
// Extract the hostname from the URL
URI remoteUrl = new Uri(url);
string remoteHost = remoteUrl.Host;
2020-06-30 12:50:28 +02:00
// Match the incoming URL against a whitelist
if (!whiteList.Contains(remoteHost))
2020-06-30 12:50:28 +02:00
{
return BadRequest();
}
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
2020-06-30 12:50:28 +02:00
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
2020-06-30 12:50:28 +02:00
string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
return Content(responseFromServer);
}
}
}
----
include::../see.adoc[]
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
include::../message.adoc[]
include::../highlighting.adoc[]
endif::env-github,rspecator-view[]