Domanda

Sto lavorando a rifare il codice della nostra azienda e voglio avere un'applicazione chiara, facile da leggere e ragionevolmente sicura.

E no, non stiamo usando application.cfc. Quindi non discutiamo di questo, per favore.

Voglio solo sapere quali script aggiungeresti per la sicurezza.

Sto usando ColdFusion 8 Standard, SQL 2008.

Ecco uno degli script che sto attualmente usando, ma voglio sentire da alcuni altri programmatori di 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>

Grazie per il tuo tempo.

È stato utile?

Soluzione

Consiglierei di non tentare di catturare tutto in modo globale. Ci saranno inevitabilmente alcune cose che scivolano attraverso le fessure, non importa quanto sia complesso e contorto il tuo codice di protezione globale.

Invece, il metodo "corretto" (per quello che vale) è quello di disinfettare tutti i contenuti presentati su una pagina (o in una e -mail, ecc.) - durante l'output - che ha iniziato la sua vita come input dell'utente.

Detto questo, dai un'occhiata Owasp. Hanno eccellenti librerie per proteggere da tutti i tipi di attacchi, tra cui quelli che menzioni (SQLI, XSS, CRLF). Un mio collega ha recentemente concluso alcune di quelle librerie in un CFC che possiamo usare nelle nostre applicazioni, e ha spiegato come usarlo sul nostro blog di sviluppatori:

Antisamia

Se l'applicazione accetta HTML generata dall'utente, ad esempio commenti sul blog, devi assicurarti di disinfettare il tuo input per prevenire gli attacchi XSS. Non vorresti che qualcuno fosse in grado di inserire un codice dannoso nei commenti del tuo blog, quindi hai bisogno di un modo per filtrare l'input. accedere Antisamia. L'antisamia consente di filtrare facilmente HTML generato dall'utente in base a ciò che definisce le politiche. L'antisamia è un progetto Java, quindi l'ho confezionato in un CFC per un facile utilizzo da Coldfusion.

Il modo semplice di utilizzare l'antisamia è creare un'istanza del componente antisamico (cfc.owasp.antisamy) e chiamare il metodo getcleanhtml () sull'input.

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

Ciò eseguirà l'antisamia con il file di politica predefinito (abbastanza permissivo) e restituirà il markup HTML pulito.

Encoder ESAPI

La prossima biblioteca che ho portato dal progetto OWASP è il Encoder ESAPI. Ancora una volta questo è un progetto Java che ho avvolto in un CFC per un uso più facile. L'encoder fornisce diversi metodi per la codifica oltre a quelli inclusi a Coldfusion. Alcuni dei metodi più utili includono EncodeForJavaScript (), ENCODEFORHTMLATTRIBUTE () e ENCODEFORCSS (). L'uso del componente è piuttosto semplice, basta istanziarlo e chiamare il metodo appropriato.

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

Un metodo molto utile che questa libreria fornisce è il metodo canonicalis. Il Documentazione dalla versione beta dell'encoder ESAPI fornisce una buona descrizione di ciò che fa questo metodo.

Tuttavia, se insisti su una soluzione globale, perché reinventare la ruota? Perché non provare qualcosa di simile Fuso. Il prezzo è probabilmente inferiore al costo delle ore di sviluppo che verrebbero spese in coccole insieme, debug e trattare con problemi di sicurezza che sfondano il tuo sistema coltivato in casa.

Altri suggerimenti

Personalmente, non sono davvero sicuro che questo approccio "globale" sia il migliore. verifico tutto dati in arrivo in Tutti i modelli che accettano dati esterni, con regole di convalida specifiche per ogni situazione. Quindi il livello aggiuntivo sembra eccessivo.

Tali script non ti proteggono dal mettere la stringa nell'ID numerico passato nell'URL: devi verificarlo in qualche modo. È necessario utilizzare HTMleditFormat/xmlformat nelle viste in ogni modo e così via.

Loop Elenco PS per CFScript:

for (i=1; i LTE ListLen(scopestoClean); i++) {
    scopeName = ListGetAt(scopestoClean,i);
    //... following code
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top