ColdFusion 9: int и type = «numeric» противная ошибка?
Я только что испытал поведение, которое не поддается какой-либо логике и потенциально может привести к серьезным проблемам.это была ошибка, или если поведение было изменено, и каковы лучшие методы, чтобы обойти проблему? Если оно'Это ошибка, есть ли патч?
Вот's два странных поведения, которые вместе взятые представляют угрозу для любой системыЦелостность данных. ->
int('1 2')
->41276
isValid('numeric', '1 2')
true
Зачем? Ну, давайте'смотри ...
DELETE
FROM Something
WHERE id = ;
Здесьtype="numeric"
проверка аргументов (возможно, основанная на том же алгоритме, что иisValid
?) нет бросить с'1 2'
, Еще хуже,cfqueryparam cfsqltype="cf_sql_integer"
кажется используетint
преобразовать значение, которое в конечном итоге будет.41276
Другими словами,deleteSomething('1 2')
удалит сущность с идентификатором41276
вместо того, чтобы генерировать исключение, так как значение1 2
явно не числовой.
Теперь единственное исправление, о котором я подумал, - это проверка дополнительных аргументов с помощьюisValid('integer', ...
или регулярное выражение, но этоэто настоящая боль, и, кроме того, я никогда не понимал, почему они нет реализован?type="integer"
Очевидно, я также всегда делал ложное предположение, чтоcfqueryparam type="cf_sql_integer"
подтвердит, что переданное значение является допустимым целым числом.
РЕДАКТИРОВАТЬ:
Кажется, что дажеisvalid('integer', ...
также не является надежным, как мы можем видеть в
Почему isvalid ("целое число «»1,5") = ДА?
EDIT2:
Я знаю, что мог бы добавить проверку дополнительных аргументов для каждого ожидаемого целочисленного аргумента в каждой функции, однако это потребовало бы исправления огромной базы кода в моем случае, и это 'Также очень подвержен ошибкам. Это также делает проверку встроенного аргумента совершенно бесполезной в этом случае.
Я бы предпочел решение, где я могсоздать и применить неофициальный патч, Это реалистичный вариант? Если это так, я хотел бы указать в правильном направлении.
EDIT3: это неt решает все проблемы, но CF11 добавил поддержкуstrictNumberValidation настройка уровня приложения. "
Начиная с ColdFusion 11, эта функция оценивается более строго. Установка этого значения в false заставляет функцию isValid вести себя по-старому. Этот параметр влияет на теги cfargument, cfparam и cfform, где бы ни находилось целое число & числовая проверка используется. На основании этого параметра проверка также отражается в этих тегах. "