Как защитить функции access = "remote" в CFC от перехватчиков? - PullRequest
6 голосов
/ 23 мая 2009

Одной из замечательных особенностей CFC является возможность многократного использования кода как для прямой страницы .cfm, так и для приложений Flex.

Одно такое приложение, которое я разработал, использует Flex для своих возможностей построения графиков и нуждается в доступе к функции getResults () в CFC.

Весь этот контент находится за механизмом аутентификации, но поскольку cfc откроет себя для запроса wsdl:

https://myserver.com/c/functions.cfc?wsdl

и на самом деле вернет результаты в браузер, если URL-запрос обработан правильно:

https://myserver.com/c/functions.cfc?method=getResults&Term=2009&Course=Anatomy

Какие методы используют люди для защиты cfc от прямого доступа, ЕСЛИ БЕЗ запроса не поступает непосредственно от процессора CFML ИЛИ от Flex Remoting?

Ответы [ 6 ]

4 голосов
/ 23 мая 2009

Вы можете использовать некоторые переменные области видимости CGI, чтобы проверить, откуда поступает запрос.

т.е. CGI.REMOTE_HOST, CGI.REMOTE_ADDR

Итак, вы, вероятно, создадите новую функцию со свойством access = "public", которая проверяет значения этих переменных по списку допустимых значений для вашего сервера. Если он вернет true, вы выполните запрос, а если он вернет false, вы получите / вернете какую-то ошибку.

3 голосов
/ 23 мая 2009

Я бы предложил добавить обработчик OnRequestStart в ваш файл application.cfc и выполнить там проверку ... что это за проверка, зависит от вашей текущей модели, но некоторые хорошие предложения - проверка cgi.remote_user (если он аутентифицирован) или, возможно, что-то хранить в области видимости сеанса?

<cfif structKeyExists(session,"empID") and len(session.empid)>
  <!--- user is authenticated, process normally --->
<cfelse>
  <!--- abort request or sending meaningful error message --->
</cfif>
2 голосов
/ 28 мая 2009

А как насчет использования атрибута новых ролей? Каждый, кто посещает ваш сайт, автоматически получает cflogin role = "public".

1 голос
/ 26 мая 2009

Одна вещь, которую я предпочитаю делать, это иметь только один аргумент для каждого метода - либо XML, либо Struct - и требовать, чтобы определенное имя узла / объекта присутствовало в этом XML или Struct.

<cfif NOT StructKeyExists(arguments.myArgs, "requiredParam")>
    <cfxml name="myXML">
         <error>
             <message>Required parameter not found.</message>
         </error>
    </cfxml>

    <cfreturn myXML />
</cfif>

0 голосов
/ 20 июня 2012

Просто наткнулся на этот вопрос, пока искал что-то еще и подумал, что я добавлю свой 2p:

У меня есть приложение, использующее удаленный CFC, которое я хочу, чтобы оно было доступно только зарегистрированным пользователям с правами администратора. В этом случае проверка переменных CGI будет по-прежнему проходить для гостевых пользователей приложения.

Когда пользователь с правами администратора входит в систему, я беру хэш его идентификатора сеанса и время входа в систему и сохраняю его в базе данных и области сеанса. Когда я нажимаю на удаленный CFC, я передаю хеш как переменную и проверяю его по базе данных пользователей-администраторов.

Если запись возвращается, я знаю, что текущий пользователь является администратором, и я продолжаю выполнять запрос.

0 голосов
/ 23 мая 2009

Хотя я немного стар, я откопал заметки Билла Пурселла о безопасности приложений CF в целом. О безопасности ХФУ уже упоминалось.

http://www.bpurcell.org/blog/index.cfm?mode=entry&entry=978

...