İçeriğe geç

Dinamik kod çalıştırma (ARCH341)

Anahtar dotnet.security.dynamic-code-execution · Önem critical · Kategori security · CWE CWE-95

.NET’te eval yoktur; ama Roslyn scripting, PowerShell barındırma, System.Linq.Dynamic, DataTable.Compute ve baytlardan assembly yükleme, çalışma zamanındaki bir dizgiyi çalışan koda çevirir. Sabit bir betik tasarım kararıdır; değişkenle gelen betik girdisini bekleyen bir uzaktan kod çalıştırmadır.

public async Task<object> Run(string expression)
{
return await CSharpScript.EvaluateAsync(expression);
}
public decimal Run(Operation op, decimal a, decimal b) => op switch
{
Operation.Add => a + b,
Operation.Multiply => a * b,
_ => throw new ArgumentOutOfRangeException(nameof(op))
};

Girdiyi sabit bir işlem kümesine eşleyin (enum/switch, kodda kurulan expression tree). Betik çalıştırma bir ürün özelliğiyse kum havuzuna alın ve betik kaynaklarını izin listesiyle sınırlayın.