bx-unsafe-evaluate — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited bx-unsafe-evaluate (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
install-bx-module bx-unsafe-evaluate
# CommandBox
box install bx-unsafe-evaluate// evaluate( expression )
// Evaluates the expression dynamically from left to right
// Returns the result of the rightmost expression
result = evaluate( expression )// Dynamic property access
name = "boxlang"
lastName = "majano"
op = "eq"
result = evaluate( "#name# #op# #name#" ) // true
// Accessing dynamic variable names
variables.userAge = 30
variables.userEmail = "[email protected]"
fieldName = "userAge"
value = evaluate( fieldName ) // Returns 30{% hint style="danger" %} evaluate() is explicitly discouraged for new code. It executes arbitrary BoxLang expressions, which creates serious injection vulnerabilities if any user-controlled input reaches it. {% endhint %}
// ❌ UNSAFE: dynamic variable access via evaluate()
result = evaluate( userControlledInput )
// ✅ SAFE: use struct key access instead
data = { name: "Luis", age: 30 }
key = "name"
result = data[ key ] // Direct struct access — no evaluate() needed
// ✅ SAFE: use variables scope access
fieldName = "myVar"
result = variables[ fieldName ]
// ✅ SAFE: use invoke() for dynamic method calls
result = invoke( obj, methodName, args )evaluate() Is AcceptableThe ONLY justifiable use case is legacy CFML migration — where existing code relies on evaluate() and refactoring would take significant time. In all such cases, plan to remove it:
// Legacy code being migrated — evaluate() kept temporarily
// TODO: Replace with variables[ fieldName ] when all callers are updated
result = evaluate( fieldName )evaluate()variables[ dynamicKey ] for dynamic variable accessinvoke( object, methodName, args ) for dynamic method dispatchevaluate() calls as part of code modernization~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.