Como proteger o acesso = “remotas” funções em CFCs de bisbilhoteiros?
-
23-08-2019 - |
Pergunta
Uma das grandes características do CFC é a capacidade de reutilizar o código para uma página .cfm em linha reta e para aplicativos Flex.
Um tal app que eu devleoped usos Flex para as suas capacidades de gráficos e precisa de acesso a um 'getResults ()' função no cfc.
Todo este conteúdo está por trás de um mecanismo de autenticação, mas desde que a cfc vai abrir-se a um pedido wsdl:
e irá realmente retornar os resultados para o navegador se a consulta URL é trabalhada corretamente:
https://myserver.com/c/functions.cfc ? method = getResults & Term = 2009 e Curso = Anatomy
O que técnicas têm pessoas usado para proteger o cfc de acesso directo menos que o pedido está vindo diretamente do processador CFML OR de Flex Remoting?
Solução
Você poderia utilizar algumas das variáveis ??de escopo CGI para verificar se o pedido está vindo.
ou seja: CGI.REMOTE_HOST, CGI.REMOTE_ADDR
Assim, você provavelmente construir uma nova função com um access = propriedade "pública", que verifica os valores dessas variáveis ??contra uma lista de valores válidos para o seu servidor. Se ele retorna true, você deve executar o pedido e se ele retorna false, você jogaria / retornar algum tipo de erro.
Outras dicas
Gostaria de sugerir adicionando um manipulador de OnRequestStart ao seu arquivo Application.cfc, e executar uma verificação de lá ... o que esse cheque é depende do seu modelo atual, mas algumas boas sugestões seria a de verificar cgi.remote_user (se autenticado) ou talvez guardar algo no escopo da sessão?
<cfif structKeyExists(session,"empID") and len(session.empid)>
<!--- user is authenticated, process normally --->
<cfelse>
<!--- abort request or sending meaningful error message --->
</cfif>
Que tal usar o novo atributo papéis? Todo mundo que visita o seu site recebe automaticamente cflogin roles = "público".
Uma coisa que eu prefiro fazer é ter apenas um argumento para cada método - XML ??ou Struct -. E requerem um certo nome do nó / objeto de estar presente nesse XML ou struct
<cfif NOT StructKeyExists(arguments.myArgs, "requiredParam")>
<cfxml name="myXML">
<error>
<message>Required parameter not found.</message>
</error>
</cfxml>
<cfreturn myXML />
</cfif>
Embora um pouco velho, eu desenterrar notas de Bill Purcell em garantir CF aplicativos em geral. Fixação de CFC têm mencionado.
http://www.bpurcell.org/blog/index .cfm? mode = entrada & entrada = 978
Apenas me deparei com esta questão, enquanto olhando para outra coisa e pensei em adicionar o meu 2p:
Eu tenho um aplicativo usando um CFC remoto que eu só quero estar disponível para usuários logados 'admin'. Neste caso, a verificação variável CGI ainda passaria para usuários convidados do aplicativo.
Quando um usuário administrador faz logon, eu tomo um hash de seu ID de sessão e tempo de login e loja que no banco de dados eo escopo de sessão. Quando eu bati o CFC remoto, eu passo o hash como uma variável e verificar se contra o banco de dados de usuários de administração.
Se um registro de volta, eu sei que o usuário atual é admin e eu continuar com o pedido.