include::../description.adoc[] == Noncompliant Code Example ---- using System.Diagnostics; using Microsoft.AspNetCore.Mvc; namespace WebApplicationDotNetCore.Controllers { public class RSPEC2076OSCommandInjectionNoncompliantController : Controller { public IActionResult Index() { return View(); } public IActionResult Run(string binary) { // If the value "/sbin/shutdown" is passed as binary and the web server is running as root, // then the machine running the web server will be shut down and become unavailable for future requests Process p = new Process(); p.StartInfo.FileName = binary; // Noncompliant p.StartInfo.RedirectStandardOutput = true; p.Start(); string output = p.StandardOutput.ReadToEnd(); p.Dispose(); return View(); } } } ---- == Compliant Solution ---- using System.Diagnostics; using System.Text.RegularExpressions; using Microsoft.AspNetCore.Mvc; namespace WebApplicationDotNetCore.Controllers { public class RSPEC2076OSCommandInjectionCompliantControllerController : Controller { public IActionResult Index() { return View(); } public IActionResult Run(string binary) { if (binary.Equals("/usr/bin/ls") || binary.Equals("/usr/bin/cat")) { // only ls and cat commands are authorized Process p = new Process(); p.StartInfo.FileName = binary; // Compliant p.StartInfo.RedirectStandardOutput = true; p.Start(); string output = p.StandardOutput.ReadToEnd(); p.Dispose(); } return View(); } } } ---- include::../see.adoc[] ifdef::env-github,rspecator-view[] ''' == Comments And Links (visible only on this page) include::../comments-and-links.adoc[] endif::env-github,rspecator-view[]