Я бы посоветовал не пытаться поймать все на глобальном уровне.Неизбежно будет несколько вещей, которые будут проскальзывать сквозь трещины, независимо от того, насколько сложным и запутанным становится ваш глобальный код защиты.
Вместо этого, «правильный» (для чего он стоит) метод - дезинфицировать весь контент, являющийсяпредставленный на странице (или в электронном письме и т. д.) - во время вывода - который начал свою жизнь как пользовательский ввод.
Тем не менее, взгляните на 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 .Цена, вероятно, меньше, чем стоимость часов разработки, которые будут потрачены на совместную работу, отладку и решение проблем безопасности, которые пробивают вашу домашнюю систему.