【发布时间】:2011-06-06 18:31:09
【问题描述】:
我最近一直在使用 Coldfusion 9(主要是 PHP 的背景),我正在摸索如何“清理/清理”用户提交的输入/字符串。
我想让它成为 HTMLSAFE,消除任何 javascript 或 SQL 查询注入,就像往常一样。 我希望我忽略了 CF9 已经附带的某种功能。
有人能指出正确的方向吗?
【问题讨论】:
标签: coldfusion coldfusion-9 data-cleaning
我最近一直在使用 Coldfusion 9(主要是 PHP 的背景),我正在摸索如何“清理/清理”用户提交的输入/字符串。
我想让它成为 HTMLSAFE,消除任何 javascript 或 SQL 查询注入,就像往常一样。 我希望我忽略了 CF9 已经附带的某种功能。
有人能指出正确的方向吗?
【问题讨论】:
标签: coldfusion coldfusion-9 data-cleaning
好吧,对于 SQL 注入,你想使用CFQUERYPARAM。
至于清理 XSS 等的输入,您可以使用ScriptProtect attribute in CFAPPLICATION,尽管我听说它不能完美地工作。如果您愿意,可以查看Portcullis 或类似的第 3 方 CFC,以获得更好的脚本保护。
【讨论】:
这是对 Kyle 建议的补充而不是替代答案,但 cmets 面板对于链接来说有点垃圾。
看看 ColdFusion string functions。你有 HTMLCodeFormat、HTMLEditFormat、JSStringFormat 和 URLEncodedFormat。所有这些都可以帮助您处理从表单发布的内容。
您也可以尝试使用正则表达式函数来删除 HTML 标记,但它从来都不是一门精确的科学。这个ColdFusion based regex/html question 应该会有所帮助。
您还可以尝试使用cfformprotect 之类的工具来保护自己免受机器人和已知垃圾邮件发送者的侵害,该工具将Project Honeypot 和Akismet 保护以及其他工具集成到您的表单中。
【讨论】:
你有几个选择:
<script/>、<img/> 和其他几个标签请注意,如果您真的试图清理 HTML,请使用 ColdFusion 可以本地访问的 Java。特别是使用OWASP AntiSamy Project,它接受一个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-Imput 或 CSS-Imput,我还推荐OWASP Java HTML Sanitizer Project。
【讨论】: