мигрирование доступа ms к mysql - изменение кодировки CF (от новичка) - PullRequest
1 голос
/ 11 января 2012

Я переношу свой код запроса coldfusion9 из ms access 2003 в mySql.Мои знания MySql ограничены, так что это вопрос новичка:)

В своем коде MS Access я использовал простые cfqueries ... вот пример:

<cfquery name="catalog" datasource="mydatasource">
SELECT TableID, DateListed, FirstColor, SecondColor
FROM mytable
WHERE FirstColor='blue' OR SecondColor='blue'
ORDER BY DateListed DESC
</cfquery>

Я понимаю из онлайнчитая, что нужно использовать cfqueryparam с mySql для защиты от внедренного вредоносного кода.Я не уверен, как внедряется вредоносный код .... так как пользователи онлайн-сайтов не взаимодействуют с моей базой данных через формы, мне все равно нужно будет использовать cfqueryparam?

Если да, не могли бы вы привести пример добавления cfqueryparam в приведенный выше код?или предложить хороший простой ресурс для написания кода на MySql (в моих поисках в Интернете большая часть информации о кодировании предполагает более высокий уровень знаний, чем у меня)

Ответы [ 2 ]

2 голосов
/ 11 января 2012

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

Из вашего примера вы использовали cfqueryparam:

<cfquery name="catalog" datasource="mydatasource">
SELECT TableID, DateListed, FirstColor, SecondColor
FROM mytable
WHERE FirstColor=<cfqueryparam cfsqltype="cf_sql_varchar" value="blue">
   OR SecondColor=<cfqueryparam cfsqltype="cf_sql_varchar" value="blue">
ORDER BY DateListed DESC
</cfquery>

Это, однако, мало что дает. Выплата в таких ситуациях:

<cfquery name="catalog" datasource="mydatasource">
SELECT TableID, DateListed, FirstColor, SecondColor
FROM mytable
WHERE FirstColor=<cfqueryparam cfsqltype="cf_sql_varchar" value="#form.color#">
   OR SecondColor=<cfqueryparam cfsqltype="cf_sql_varchar" value="#form.color#">
ORDER BY DateListed DESC
</cfquery>

Теперь, независимо от того, является ли цвет синим или красным или используется повторно, этот запрос компилируется в базе данных и будет быстрее при последующих вызовах. Кроме того, злоумышленник может изменить значение form.color на значение blue';drop table users;, и вы будете защищены от внедрения SQL.

0 голосов
/ 12 января 2012

Существует как минимум три веских причины для использования cfqueryparam

1) Защита от инъекций или других дурных намерений от пользователей.

2) Запросы выполняются быстрее, поскольку вы явно указываете их тип.

3) Это просто хорошая идея, плюс похожие на другие языковые функции, такие как

$unsafe_variable = $_POST["user-input"];
$safe_variable = mysql_real_escape_string($unsafe_variable);

Мы использовали подобные примеры во всех объектах DAO (это те cfcs, в которых есть код, который обращается к базе данных)

<cfqueryparam cfsqltype="CF_SQL_INTEGER" value=#arguments.assessmentID# />
<cfqueryparam cfsqltype="CF_SQL_CHAR" value='%#arguments.searchString#%' />
<cfqueryparam cfsqltype="CF_SQL_DATE" value=#arguments.assessmentDate# />

Где # arguments.varname # был передан в метод, содержащий SQL.

...