79 lines
1.6 KiB
Plaintext
79 lines
1.6 KiB
Plaintext
![]() |
== How to fix it in .NET
|
||
|
|
||
|
=== Code examples
|
||
|
|
||
|
include::../../common/fix/code-rationale.adoc[]
|
||
|
|
||
|
==== Noncompliant code example
|
||
|
|
||
|
[source,csharp,diff-id=1,diff-type=noncompliant]
|
||
|
----
|
||
|
public class ExampleController : Controller
|
||
|
{
|
||
|
public IActionResult Apply(string EffectName)
|
||
|
{
|
||
|
var EffectInstance = Activator.CreateInstance(null, EffectName); // Noncompliant
|
||
|
object EffectPlugin = EffectInstance.Unwrap();
|
||
|
|
||
|
if ( ((IEffect)EffectPlugin).ApplyFilter() )
|
||
|
{
|
||
|
return Ok();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return Problem();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public interface IEffect
|
||
|
{
|
||
|
bool ApplyFilter();
|
||
|
}
|
||
|
----
|
||
|
|
||
|
==== Compliant solution
|
||
|
|
||
|
[source,csharp,diff-id=1,diff-type=compliant]
|
||
|
----
|
||
|
public class ExampleController : Controller
|
||
|
{
|
||
|
private static readonly string[] EFFECT_ALLOW_LIST = {
|
||
|
"SepiaEffect",
|
||
|
"BlackAndWhiteEffect",
|
||
|
"WaterColorEffect",
|
||
|
"OilPaintingEffect"
|
||
|
};
|
||
|
|
||
|
public IActionResult Apply(string EffectName)
|
||
|
{
|
||
|
if (!EFFECT_ALLOW_LIST.Contains(EffectName))
|
||
|
{
|
||
|
return BadRequest("Invalid effect name. The effect is not allowed.");
|
||
|
}
|
||
|
|
||
|
var EffectInstance = Activator.CreateInstance(null, EffectName);
|
||
|
object EffectPlugin = EffectInstance.Unwrap();
|
||
|
|
||
|
if ( ((IEffect)EffectPlugin).ApplyFilter() )
|
||
|
{
|
||
|
return Ok();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return Problem();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public interface IEffect
|
||
|
{
|
||
|
bool ApplyFilter();
|
||
|
}
|
||
|
----
|
||
|
|
||
|
=== How does this work?
|
||
|
|
||
|
include::../../common/fix/pre-approved-list.adoc[]
|
||
|
|