最近我一直在使用Coldfusion 9(主要背景是PHP),我正在努力想方设法“清理/净化”用户提交的输入/字符串。
我希望将其变为HTML安全,消除任何javascript或SQL查询注入等常见问题。 我希望我已经忽略了CF9中已经存在的某种函数。
有人能指点我正确的方向吗?
最近我一直在使用Coldfusion 9(主要背景是PHP),我正在努力想方设法“清理/净化”用户提交的输入/字符串。
我希望将其变为HTML安全,消除任何javascript或SQL查询注入等常见问题。 我希望我已经忽略了CF9中已经存在的某种函数。
有人能指点我正确的方向吗?
对于SQL注入,您需要使用CFQUERYPARAM。
至于清理XSS等输入内容,您可以使用CFAPPLICATION中的ScriptProtect属性,但我听说它并不完美。如果您喜欢,可以查看Portcullis或类似的第三方CFC以获得更好的脚本保护。
您还可以尝试使用类似cfformprotect的工具来保护自己免受机器人和已知垃圾邮件发送者的侵害,该工具将Project Honeypot和Akismet等保护工具集成到您的表单中。
你有几个选择:
<script/>
、<img/>
和其他几个标签。话虽如此,如果您真的想要清理 HTML,请使用 Java,ColdFusion 可以本地访问它。特别是使用 OWASP AntiSamy 项目,它可以接受 HTML 片段并将其中的值列入“白名单”。这是像 SO 和 slashdot.org 这样的网站用来保护提交内容的方法,也是一种更安全的接受标记内容的方法。
在ColdFusion和几乎任何语言中,字符串的清理非常重要,这取决于您想对该字符串执行什么操作。大多数缓解措施是为了:
<cfqueryparam ...>
)如果您遵循通过在第一步允许基本上所有内容来预防和减少字符串的想法,并通过删除或替换字符来消除恶意代码(黑名单方法),则始终存在风险。更好的解决方案是使用正则表达式再次使用rereplace(...)
替换字符串,该正则表达式明确允许仅用于您将其用作简单解决方案的场景所需的字符。用例包括数字、列表、电子邮件地址、网址、名称、邮政编码、城市等输入。
例如,如果您想要请求电子邮件地址,则可以使用
<cfif reFindNoCase("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.(?:[A-Z]{5})$", stringtosanitize)>...ok, clean...<cfelse>...not ok...</cfif>
(或者是自己写的正则表达式)。 对于 HTML 输入或 CSS 输入,我还推荐使用 OWASP Java HTML Sanitizer Project。