Общее программирование принимает за программиста ColdFusion для предотвращения? [закрытый]

Возможно, вы не сможете найти заводной путь с помощью команды which. После установки sdkman на Linux-подобные системы Mac OSX, Linux, Cygwin, Solaris и FreeBSD,
Сначала запустите $ source "$HOME/.sdkman/bin/sdkman-init.sh", затем вы сможете получить доступ к установленным комплектам разработки.

А именно, если вы наберете 'which groovy', он должен показать путь, и вы сможете вызывать другие команды SDK.

9
задан 3 revs, 3 users 100% 6 April 2012 в 16:54
поделиться

9 ответов

  • set upload path to a web accessible, CF-enabled directory!!!

  • isStruct() before isObject() in a series of 's expecting isStruct only catches struct (cfc component returns True from isStruct() as well)

  • no HtmlEditFormat() when displaying user-generated content (XSS)

  • forgot to add output=false on CFC methods

  • not using inside

  • not scoping not-so-evident variables like cfquery name or loop index in a method

  • use when all they need is plain-vanilla HTML

  • forgot to UrlEncodedFormat() user-defined URL

  • use without sanitizing the content

  • trust isDate() too much (any number would return true)

  • expect string comparison to be case-sensitive (IS and EQ operators are case-insensitive)

  • sending strings "yes" or "no" to SerializeJSON() without appending a whitespace to preserve the string (otherwise SerializeJSON() or DeserializeJSON() will translate them to "true" and "false")

  • not putting singletons services in application scope

  • blindly create as much CFCs as one wants like one would do in JAVA

  • putting complex value/object into a list (can't, list is just a string of comma-seperated values)

  • writing functions that takes array as an argument and modify that array expecting that array will be modified (array in CFML is passed by value)

  • blindly changes access="remote" on a method and expect it to work (when remote proxy is generally more appropriate)

  • use a lot of WriteOutput() in cfscript when CFML is more appropriate

  • blindly uses IsDefined() when StructKeyExists() can generally do it more efficiently

  • blindly uses Iif() and De() without knowing they're as nasty as Evaluate()

  • update some code in onApplicationStart() and not seeing the difference on refresh (restart the app!)

  • or '' outside of causing multiple new query connections to be opened. 99% of the time it's better to have multiple statements inside of one cfquery to perform multiple actions, or to UNION data together.

  • hardcoding absolute path when ExpandPath() is generally better

  • forgot to turn on Unicode support in DSN (Unicode becomes '????')

  • not upgrading to the latest JRE and Hotfixes

  • misusing Client scope and blow up Windows registry...

  • uses depreciated/obsolete functions/features (i.e. flash form aka flex 1.x alpha, cftable, Verity full-text search, etc...)

  • passing CFCATCH to a function as argument type Struct (CFCATCH behaves like a Struct, but it is not. Just pass it as type 'Any').

  • Not reading CFC Best Practices from ColdBox wiki.

  • buying in the mindset of .ASP(X) or .JSP or [insert web technology] are always better.. ;)

  • not use PrecisionEvaluate() and getting all sort of floating point rounding error especially when calculating money.

27
ответ дан 4 December 2019 в 06:30
поделиться

Inappropriate use of #

SELECT *

Not scrubbing URL/form inputs

Debugging on in production environment (even if output is suppressed)

3
ответ дан 4 December 2019 в 06:30
поделиться

SQL Injection Attacks. It seems like cfquery is just made to allow them. So you should use cfqueryparams.

2
ответ дан 4 December 2019 в 06:30
поделиться

В Coldfusion все переменные по умолчанию являются глобальными, если они не объявлены с ключевым словом var . (В некоторой степени похоже на ситуацию в Javascript.)

Таким образом, вы должны либо запомнить var каждую переменную, используемую в функции, включая такие вещи, как имена, которые используют в cfquery name , или вы можете просто использовать этот трюк:

<cffunction name="MyFunction">
    <cfset var Local = StructNew()>

    <!--- Now anything Local. is automatically local --->
    <cfset Local.x = 42>

    <!--- Including cfquery name="" --->
    <cfquery name="Local.Customers" datasource="some_datasource">
        SELECT C.ID, C.Name
        FROM Customers C
    </cfquery>
</cffunction>

В имени Local нет ничего волшебного, это просто соглашение. Хотя Coldfusion 9 добавит явную локальную область видимости , поэтому, если вы используете Local , это, вероятно, упростит обновление до CF9, когда придет время.

Обратите внимание, что ситуация немного иная. для CFC: В CFC область переменных (область "по умолчанию") не t global, как и для обычных функций, но существует для каждого экземпляра вашего CFC. Таким образом, хотя забыть использовать var не так опасно в CFC, как в функции верхнего уровня, лучше всего использовать var все время.

1
ответ дан 4 December 2019 в 06:30
поделиться

Чрезмерное использование «запроса запроса». То есть дальнейшая фильтрация или сортировка результатов запроса с использованием тега cfquery.

Этот тип работы часто лучше выполняется самой базой данных, особенно если набор данных большой.

0
ответ дан 4 December 2019 в 06:30
поделиться

Одной из самых больших ошибок было бы неиспользование cfqueryparam

Очень плохо:

SELECT UserName
FROM Customers
WHERE CustomerID = #URL.custid#

Очень хорошо:

SELECT UserName
FROM Customers
WHERE CustomerID = <cfqueryparam value="#URL.custid#" cfsqltype="cf_sql_integer">`

Совершение этой ошибки будет стоить вам веб-сайта.

0
ответ дан 4 December 2019 в 06:30
поделиться

Бесстыдное воровство форматирования Генри ...

  • быстрее и точнее проверять явное логическое значение, а не подразумеваемое; используйте вместо
  • , не используйте eval (), de () или iif () ... никогда. всегда есть способ обойти эти медленные функции
  • , понимающие структуры, ключи, значения, а также способы доступа к данным запроса и структуры с использованием нотации массива. (обычно это обходится без использования функции Assessment ())
  • не используйте знаки решетки, если только вы не выводите данные или иным образом не создаете строку (не делайте этого: myFunction (arg = # myVar #))
  • прочтите и поймите разницу между ЭТОЙ и ПЕРЕМЕННОЙ областью видимости в CFC
  • , избегайте чрезмерного использования , когда вам, вероятно, потребуется использовать непосредственно перед тем, как вы начнете вывод (до doctype, объявления xml или )
  • , не бросайте вслепую значения ColdFusion в блок сценария HTML (javascript) без использования jsStringFormat ()
  • , если вы не используете < CDATA> текста в вашем XML, вы можете использовать xmlFormat () при создании XML-документа
  • не используйте реестр Windows для данных области клиента. Используйте базу данных.
  • если ваша ИТ-архитектура позволяет, используйте данные сеанса вместо данных клиента.
  • используйте правильно и последовательно; общие данные будут утечкой в ​​вашем приложении.
  • если вы собираетесь использовать объекты Java, обратите внимание на сообщения об ошибках Java (например, «метод не найден» может не означать, что метод не существует в все, это означает, что метод не существует для аргументов, которые вы ' ve прилагается)
  • , если вам нужно читать большие файлы, либо используйте новые функции CF8 "File", либо передайте задачу Java на CF6 & 7. неэффективен для больших файлов.
  • поймите pass- по ссылке и передаче по значению, и как эти концепции работают в CF; особенно при использовании функций для изменения XML-документов
  • , как заявил Генри, всегда используйте ; также убедитесь, что вы используете правильный параметр CFSQLType для вашей СУБД (для даты, времени, метки времени и т. д.)
  • не связывайте вместе последовательность логических блоков и , используйте и < cfcase> если у вас более трех условий, вам нужно обработать
  • больше замечаний по архитектуре: всегда выполняйте какую-то проверку на стороне сервера, чтобы уловить неприятные данные, которые пользователь в волчьей рубашке может передать вам
  • последнее примечание по архитектуре: позвольте CF выполнять ваш средний уровень извлечения и отображения данных, а ваш веб-сервер выполняет такие действия веб-сервера, как URL-адреса SEO (я смотрю на вас, ColdCourse)
  • 3
    ответ дан 4 December 2019 в 06:30
    поделиться

    Помещение переменных в неправильную область видимости; даже если вы не взорвете реестр или не сломаете сервер, легко медленно снизить производительность вашего приложения, увеличивая переменные до максимальной области, в которой, по вашему мнению, они могут вам понадобиться, или потерять информацию, потому что вы сохранили ее в одна область и попыталась получить к ним доступ в другой области.

    Использование cfcatch без захвата и / или передачи некоторой информации об ошибке, чтобы ее можно было найти и исправить. (Трудно найти ошибку, которая не сообщает вам, что она произошла.)

    Использование listcontains () , когда вы хотите listfind () . Особенно, если в списке есть числа. listfind () соответствует только целому элементу в списке; listcontains () соответствует части элемента. (Да, мы однажды допустили эту ошибку.)

    С доступом администратора:

    • Оставить значения по умолчанию для источника данных, настроенного на сервере. «Наименьшие привилегии» применимы и к стороне CF; не давайте ему больше разрешений, чем ему конкретно нужно. (GRANT, ALTER, REVOKE, DROP ... на самом деле вы не хотите, чтобы эти отмечены.)
    • Не устанавливаются флажки для извлечения всего содержимого из поля CLOB / BLOB, когда вы этого ожидаете. (Было действительно интересно наблюдать, как это применимо к полю, в котором мы храним PDF-файлы.)
    0
    ответ дан 4 December 2019 в 06:30
    поделиться

    Неспособность помешать пользователям видеть ошибки холодного слияния.

    Добавьте метод onError в файл Application.cfc верхнего уровня, чтобы пользователи не могли видеть их все в подробных сообщениях дампа, раскрывающих вашу внутреннюю работу (и

    <cffunction name="onError" returntype="void" output="true">
        <cfargument name="exception" type="any" required="true" />
        <cfargument name="eventname" type="string" required="true" />
    

    varscoper также является отличным инструментом для автоматизации проверки на предмет пропусков переменной области видимости в компонентах.

    http://varscoper.riaforge.org/

    1
    ответ дан 4 December 2019 в 06:30
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: