Pergunta

Estou trabalhando para refazer o código da nossa empresa e quero ter um aplicativo claro, fácil de ler e razoavelmente seguro.

E não, não estamos usando o Application.cfc. Então, não vamos discutir isso, por favor.

Só quero saber quais scripts você adicionaria para segurança.

Estou usando o ColdFusion 8 Standard, SQL 2008.

Aqui está um dos scripts que estou usando atualmente, mas quero ouvir alguns outros programadores do ColdFusion.

<cfset temp = cleanScopes('form,url') />

<!--- another method to clean url/form data from http://www.garyrgilbert.com/tools/coldfusion/cleanScopes.cfm.txt --->
<cffunction name="cleanScopes" access="public" returntype="void">
    <cfargument name="scopesToClean" type="string" required="yes">
    <cfargument name="charlist" type="string" required="no" default="">
    <cfscript>
        reTags ="<[^/>]*>|</.*>";
    </cfscript>
    <cfloop list="#scopestoClean#" index="scopeName">
    <cfif not findnocase("multipart/form-data",cgi.CONTENT_TYPE)>
        <cfscript>
            s=Evaluate(scopeName);
            for(field in s)
                if (isSimpleValue(s[field])){
                    if(reTags neq '')
                        do { prev=s[field];
                                s[field]=REReplaceNoCase(s[field],reTags,"","ALL");
                            } while (prev NEQ s[field]);
                        structUpdate(s,field,prev);
                        if (charlist neq '')
                            s[field] = replacelist(s[field],charlist,'');
                }
        </cfscript>
    </cfif>
    </cfloop>
    <cfreturn>
</cffunction>

Obrigado pelo seu tempo.

Foi útil?

Solução

Eu aconselho a não tentar pegar tudo de maneira global. Inevitavelmente, haverá algumas coisas que deslizam pelas rachaduras, por mais complexas que sejam e complicadas o seu código de proteção global.

Em vez disso, o método "correto" (para o que vale) é higienizar todo o conteúdo apresentado em uma página (ou em um email etc.) - durante a saída - que começou sua vida como entrada do usuário.

Dito isto, dê uma olhada em OWASP. Eles têm excelentes bibliotecas para proteger de todos os tipos de ataques, incluindo os vários que você menciona (SQLI, XSS, CRLF). Um colega meu recentemente encerrou algumas dessas bibliotecas em um CFC que podemos usar em nossos aplicativos, e explicou como usá -lo em nosso blog de desenvolvedores:

Antisamia

Se o seu aplicativo aceitar o HTML gerado pelo usuário, digamos comentários do blog, por exemplo, você precisará ter certeza de higienizar sua opinião para evitar ataques XSS. Você não gostaria que alguém pudesse inserir código malicioso nos comentários do seu blog, para precisar de uma maneira de filtrar a entrada. Digitar Antisamia. A Antisamy permite filtrar facilmente o HTML gerado pelo usuário de acordo com o que ele chama de políticas. A Antisamy é um projeto Java, então eu o empacotei em um CFC para facilitar o uso da Coldfusion.

A maneira simplista de usar a antisamia é criar uma instância do componente anti -visamia (cfc.owasp.antisamy) e chamar o método getCleaHtml () na entrada.

<cfset antisamy = CreateObject("component","cfc.owasp.antisamy") />
<cfset cleanHTML = antisamy.scan(form.someInput) />

Isso será executado antisamia com o arquivo de política padrão (razoavelmente permissivo) e retornará a marcação limpa HTML.

Encoder eSAPI

A próxima biblioteca que trouxe do projeto OWASP é o Encoder eSAPI. Novamente, este é um projeto Java que envolvi em um CFC para facilitar o uso. O codificador fornece vários métodos para codificar além daqueles incluídos no ColdFusion. Alguns dos métodos mais úteis incluem codeforjavascript (), codeforhtmlattribute () e codeforcss (). O uso do componente é bastante direto, basta instanciá -lo e chamar o método apropriado.

<cfset encoder = CreateObject("component","cfc.owasp.Encoder") />
<cfset html = encoder.encodeForHTML("<body onload=""alert('XSS')"">Test</body>") />

Um método muito útil que essa biblioteca fornece é o método canonicalize. o Documentação da versão beta do codificador ESAPI fornece uma boa descrição do que esse método faz.

No entanto, se você insistir em uma solução global, por que reinventar a roda? Por que não experimentar algo como Fuseguard. O preço é provavelmente menor que o custo dos horários de desenvolvimento que seriam gastos juntos, depurando e lidando com problemas de segurança que rompem seu sistema caseiro.

Outras dicas

Pessoalmente, não tenho certeza de que essa abordagem "global" seja a melhor. eu verifico tudo dados recebidos em todos os modelos que aceitam dados externos, com regras de validação específicas para cada situação. Portanto, a camada adicional parece exagerada.

Esses scripts não protegem você de colocar a string no ID numérico passado para o URL - você deve verificar de qualquer maneira. Você deve usar o htmleditformat/xmlformat nas visualizações de qualquer maneira e assim por diante.

Loop de lista de PS para CFScript:

for (i=1; i LTE ListLen(scopestoClean); i++) {
    scopeName = ListGetAt(scopestoClean,i);
    //... following code
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top