запросы холодного синтеза

Каждый раз, когда я использую запрос, мне нужно войти в базу данных (поскольку у меня нет настройки ODBC для этого)

<cfquery name="rsUser" datasource="dbname" username="admin" password="adminpass">
    SELECT * 
    FROM dbo.UsersView
    WHERE UserID = #session.userid#
</cfquery>

часть, которая мне не нравится, это то, что имя пользователя и пароль видны каждый раз, когда я делаю запрос. Я мог бы использовать #parameter#, но это лишь небольшое улучшение. Любые другие идеи, кроме настройки ODBC на сервере?


person Daniel    schedule 21.04.2011    source источник
comment
С точки зрения администратора БД вы также должны убедиться, что каждый веб-сайт использует своего собственного пользователя, который имеет доступ только к своей собственной базе данных. Таким образом, если кому-то удастся взломать свой путь с помощью SQL Injection или чего-то еще, он сможет что-то сделать только с этим одним веб-сайтом.   -  person Dave Long    schedule 25.04.2011


Ответы (2)


Если вы используете источник данных, вам не нужно указывать имя пользователя и пароль, они предоставляются при настройке источника данных. Если вы не настроили источник данных в Администраторе CF, вам нужно указать атрибуты имени пользователя и пароля, но вы также должны будете предоставить информацию о сервере БД.

Итак, короче говоря, просто вытащите свое имя пользователя и пароль, и все будет в порядке.

Кроме того, рекомендуется использовать для значений, переданных в ваш запрос (в данном случае, session.userid). cfqueryparam не только помогает защитить вас от проблем с безопасностью, таких как атаки SQL-инъекций, но также сообщает серверу базы данных создать подготовленный оператор, который будет повторно использоваться при последующих вызовах запроса и, таким образом, повысит производительность ваших запросов.

person Judah McAuley    schedule 21.04.2011
comment
большой +1, что вы должны ВСЕГДА использовать cfqueryparam, особенно в областях, которые может изменить конечный пользователь. - person Sean Coyne; 22.04.2011
comment
к вашему сведению. С CF9, если вы установите this.datasource в качестве DSN в своем Application.cfc, вам даже не нужно передавать источник данных в теге cfquery. forta.com/blog/index.cfm/2009/ 20 июня/Поиск без источника данных - person eapen; 22.04.2011

Иногда людям не нравится указывать свое имя пользователя и пароль в админке CF, и есть простой способ обойти это — поместить информацию об источнике данных в Application.cf(c|m).

Если вы используете Application.cfm, просто сделайте следующее где-нибудь в Application.cfm.

Application.dsn = {
    datasource = 'mydatasource',
    username = 'myusername',
    password = 'mypassword'
}

Если вы используете Application.cfc, поместите тот же код в свой метод onApplicationStart. Затем в вашем запросе просто используйте следующее

<cfquery name="myquery" attributeCollection="#Application.dsn#">
     SELECT * FROM mytable
</cfquery>

Как вы можете видеть, это делает ваш код красивым и простым в управлении, и если ваш DSN изменится, вам нужно будет изменить его только в одном месте.

person Dave Long    schedule 22.04.2011
comment
Как указал ОП, параметризация имени пользователя и пароля лишь немногим лучше, чем их включение в каждый запрос. Помещать эту информацию в настройки администрирования намного безопаснее, чем помещать ее в исходный код. - person Ben Doom; 24.04.2011
comment
Я согласен, что это лишь незначительно лучше, чем вводить каждый запрос, но это все же решение, если у вас нет доступа к администратору CF по какой-либо причине. - person Dave Long; 25.04.2011
comment
Я хотел сказать, что это было упомянуто и пропущено первоначальным плакатом, так что это бесполезный ответ. - person Ben Doom; 25.04.2011
comment
Я согласен, увидев это в исходном сообщении, я не думаю, что это полезно для ОП, но я думаю, что это может быть полезно другим, кто найдет этот пост в Google. - person Dave Long; 25.04.2011