İçeriğe geç

Dinamik Kod Çalıştırma (ARCH4131)

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

Kullanıcı girdisinden gelen bir string’i bir betik motoru (ScriptEngine) ile çalıştırmak doğrudan uzaktan kod çalıştırmaya (RCE) yol açar. Kod yerine veriyi yorumlayan güvenli bir yapı kullanın.

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
Object result = engine.eval(request.getParameter("expr")); // kullanıcı kodu çalıştırılır
// Kullanıcı girdisini kod olarak çalıştırma; güvenli bir ifade değerlendirici kullan
Expression expr = new SpelExpressionParser().parseExpression(allowedFormula);
Object result = expr.getValue(new StandardEvaluationContext(safeRoot));

Kullanıcı girdisini hiçbir zaman kod olarak değerlendirmeyin; sınırlı bir kural/ifade değerlendiricisi veya izin listeli işlemler kullanın.