我最近一直在使用 Coldfusion 9 (主要是PHP背景),我正试图弄清楚如何'清理/消毒'用户提交的输入/字符串。< / p>
我想让它成为HTMLSAFE,消除任何javascript或SQL查询注入,通常。 我希望我忽略了CF9已经带来的某种功能。
有人能指出我正确的方向吗?
答案 0 :(得分:7)
那么,对于SQL注入,您希望使用CFQUERYPARAM。
至于清理XSS等的输入,你可以使用ScriptProtect attribute in CFAPPLICATION,虽然我听说这不能完美地工作。如果您愿意,可以查看Portcullis或类似的第三方CFC以获得更好的脚本保护。
答案 1 :(得分:6)
这对Kyle的建议不是一个替代答案,但评论小组对于链接来说有点垃圾。
看看ColdFusion string functions。你有HTMLCodeFormat,HTMLEditFormat,JSStringFormat和URLEncodedFormat。所有这些都可以帮助您处理从表单发布的内容。
您也可以尝试使用正则表达式函数来删除HTML标记,但它绝不是一门精确的科学。这个ColdFusion based regex/html question应该有所帮助。
您还可以尝试使用类似cfformprotect之类的内容来保护自己免受机器人和已知垃圾邮件发送者的侵害,这些内容会将Project Honeypot和Akismet保护功能与其他工具集成到您的表单中。
答案 2 :(得分:1)
你有几个选择:
<script/>
,<img/>
和其他几个标记注意到,如果您真的尝试清理HTML,请使用Java,ColdFusion可以本机访问。特别是使用OWASP AntiSamy Project,其中包含HTML片段和白名单哪些值可以成为其中的一部分。这与SO和slashdot.org等网站用于保护提交的方法相同,是接受标记内容的更安全的方法。
答案 3 :(得分:0)
在coldfusion和任何语言中对字符串进行卫生处理是非常重要的,取决于你想对字符串做什么。
是最多的缓解措施<cfqueryparam ...>
)如果你遵循这个想法来防止和减少一个字符串总是有风险,基本上允许第一步中的所有内容,然后清理恶意代码&#34;远离&#34;删除或替换字符(黑名单方法)。
更好的解决方案是使用rereplace(...)
再次替换正则表达式,这些正则表达式只有在可能的情况下才明确允许您使用它的场景所需的字符作为一个简单的解决方案。用例是数字,列表,电子邮件地址,网址,名称,邮政编码,城市等的输入。
例如,如果您想要一个电子邮件地址,可以使用
<cfif reFindNoCase("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.(?:[A-Z]{5})$", stringtosanitize)>...ok, clean...<cfelse>...not ok...</cfif>
(或自己的正则表达式)。 对于HTML-Imput或CSS-Imput,我还建议使用OWASP Java HTML Sanitizer Project。