В настоящее время просто завершается проверка кода, и аудитору не нравится это использование evaluate()
и он назначает высокий риск из-за возможного внедрения кода.
Пользователю предоставляется форма продуктов, связанных с его учетной записью. Есть скрытый ввод с valuelist
идентификаторами продукта. Затем есть радиовходы для изменения статуса продуктов. Там может быть от 1 до нескольких продуктов в списке. Все эти входные данные имеют имя r_#productid#
:
<form>
<input type="hidden" name="prodIdList" value="#valueList(prodIds)#"/>
<input type="radio" id="dn_#pr_prid#" name="r_#pr_prid#" value="X" checked="checked"/>
<input type="radio" id="dn_#pr_prid#" name="r_#pr_prid#" value="P"/>
<input type="radio" id="dn_#pr_prid#" name="r_#pr_prid#" value="L"/>
</form>
При отправке код зацикливается на form.prodIdList и вычисляет эти идентификаторы для получения переданного значения (X, P или L).
<cfif StructKeyExists(FORM,"doProcessChanges")>
<cfloop list="#FORM.assetIdList#" index="i">
<cfswitch expression="#Evaluate('FORM.r_' & i)#">
<cfcase value="P">
--- do something i=productId ---
</cfcase>
<cfcase value="L">
--- do something else i=productId ---
</cfcase>
</cfswitch>
</cfloop>
</cfif>
Есть ли альтернативный способ выполнения этого, который не использует Evaluate и удовлетворит этого рецензента кода?
[править] Одно изменение, которое я сделал, состояло в том, чтобы оценить и затем сравнить значения с ожидаемым списком или регулярным выражением. Я не думал о нотации массивов и попробую это сделать. А пока вот первое обновление:
gender = evaluate('form.gender_' & i);
if( gender == 'M' || gender == 'F' || gender == 'O' || gender == 'X' ) {
-- do stuff
} else {
-- error
};