Какие сценарии безопасности / код вы добавляете в ваш application.cfm? - PullRequest
0 голосов
/ 01 октября 2010

Я работаю над переделкой кода нашей компании и хочу иметь понятное, легкое для чтения и достаточно безопасное приложение.cfm.

И нет, мы не используем application.cfc. Так что давайте не будем это обсуждать, пожалуйста.

Просто хочу узнать, какие скрипты вы бы добавили для безопасности.

Я использую стандарт coldfusion 8, sql 2008.

Вот один из сценариев, которые я сейчас использую, но я хочу услышать от некоторых других программистов 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>

Спасибо, что уделили время.

Ответы [ 2 ]

4 голосов
/ 01 октября 2010

Я бы посоветовал не пытаться поймать все на глобальном уровне.Неизбежно будет несколько вещей, которые будут проскальзывать сквозь трещины, независимо от того, насколько сложным и запутанным становится ваш глобальный код защиты.

Вместо этого, «правильный» (для чего он стоит) метод - дезинфицировать весь контент, являющийсяпредставленный на странице (или в электронном письме и т. д.) - во время вывода - который начал свою жизнь как пользовательский ввод.

Тем не менее, взгляните на OWASP .У них есть отличные библиотеки для защиты от всевозможных атак, включая различные, о которых вы упомянули (sqli, xss, crlf).Мой коллега недавно свернул некоторые из этих библиотек в CFC, который мы можем использовать в наших приложениях, и объяснил, как использовать его в нашем блоге разработчиков :

AntiSamy

Если ваше приложение принимает сгенерированный пользователем HTML, например, комментарии в блоге, необходимо убедиться, что вы дезинфицируете свой ввод для предотвращения атак XSS.Вы не хотели бы, чтобы кто-то мог вводить вредоносный код в комментарии блога, поэтому вам нужен какой-то способ фильтрации ввода.Введите AntiSamy .AntiSamy позволяет легко фильтровать сгенерированный пользователем HTML в соответствии с политикой.AntiSamy - это Java-проект, поэтому я упаковал его в CFC для простоты использования из ColdFusion.

Самый простой способ использовать AntiSamy - создать экземпляр компонента AntiSamy (cfc.owasp.AntiSamy) и вызватьметод getCleanHTML () на входе.

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

Это запустит AntiSamy с файлом политики по умолчанию (довольно разрешающим) и вернет чистую HTML-разметку.

ESAPI Encoder

Следующая библиотека, которую я привел из проекта OWASP - это ESAPI Encoder .Опять же, это Java-проект, который я завернул в CFC для более легкого использования.Кодировщик предоставляет несколько методов для кодирования помимо тех, которые включены в ColdFusion.Некоторые из наиболее полезных методов включают encodeForJavaScript (), encodeForHTMLAttribute () и encodeForCSS ().Использование компонента довольно просто, просто создайте его экземпляр и вызовите соответствующий метод.

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

Один очень полезный метод, который предоставляет эта библиотека, - это метод канонизации.Документация от бета-версии ESAPI Encoder дает хорошее описание того, что делает этот метод.

Однако, если вы настаиваете на глобальном решении, зачем изобретать велосипед?Почему бы не попробовать что-то вроде FuseGuard .Цена, вероятно, меньше, чем стоимость часов разработки, которые будут потрачены на совместную работу, отладку и решение проблем безопасности, которые пробивают вашу домашнюю систему.

0 голосов
/ 01 октября 2010

Лично я не совсем уверен, что этот «глобальный» подход является лучшим. Я проверяю все входящие данные в всех моделях , которые принимают внешние данные, с конкретными правилами проверки для каждой ситуации. Так что дополнительный слой выглядит излишним.

Такие скрипты не защитят вас от помещения строки в числовой идентификатор, переданный в URL - вы должны проверить это любым способом. Вы должны использовать HTMLEditFormat / XMLFormat в представлениях любым способом и так далее.

P.S. Цикл списка для CFScript:

for (i=1; i LTE ListLen(scopestoClean); i++) {
    scopeName = ListGetAt(scopestoClean,i);
    //... following code
}
...