Coldfusion 9中的清洁字符串/输入
Posted
技术标签:
【中文标题】Coldfusion 9中的清洁字符串/输入【英文标题】:Cleansing string / input in Coldfusion 9 【发布时间】:2011-06-06 18:31:09 【问题描述】:我最近一直在使用 Coldfusion 9(主要是 php 的背景),我正在摸索如何“清理/清理”用户提交的输入/字符串。
我想让它成为 htmlSAFE,消除任何 javascript 或 SQL 查询注入,就像往常一样。 我希望我忽略了 CF9 已经附带的某种功能。
有人能指出正确的方向吗?
【问题讨论】:
【参考方案1】:好吧,对于 SQL 注入,你想使用CFQUERYPARAM。
至于清理 XSS 等的输入,您可以使用ScriptProtect attribute in CFAPPLICATION,尽管我听说它不能完美地工作。如果您愿意,可以查看Portcullis 或类似的第 3 方 CFC,以获得更好的脚本保护。
【讨论】:
【参考方案2】:这是对 Kyle 建议的补充而不是替代答案,但 cmets 面板对于链接来说有点垃圾。
看看 ColdFusion string functions。你有 HTMLCodeFormat、HTMLEditFormat、JSStringFormat 和 URLEncodedFormat。所有这些都可以帮助您处理从表单发布的内容。
您也可以尝试使用正则表达式函数来删除 HTML 标记,但它从来都不是一门精确的科学。这个ColdFusion based regex/html question 应该会有所帮助。
您还可以尝试使用cfformprotect 之类的工具来保护自己免受机器人和已知垃圾邮件发送者的侵害,该工具将Project Honeypot 和Akismet 保护以及其他工具集成到您的表单中。
【讨论】:
很好的答案,我不得不接受这个,虽然凯尔是第一个,但我觉得你确实为答案添加了更多内容。谢谢,内容丰富:) 完全公平,很高兴我能帮上一点忙。 =) 需要注意的是,orangepips 的回答也是有效的,只是我开始发帖的时候没有发。 AntiSamy 也是我们用于数据输入清理的工具。【参考方案3】:你有几个选择:
-
"Global Script Protection" Administrator setting,对 post 和 get(即 FORM 和 URL)变量应用正则表达式以去除
<script/>
、<img/>
和其他几个标签
使用isValid() 来验证变量的数据类型(see my in depth answer on this one)。
cfqueryparam/>,用于创建 SQL 绑定参数并验证传递给它的数据类型。
请注意,如果您真的试图清理 HTML,请使用 ColdFusion 可以本地访问的 Java。特别是使用OWASP AntiSamy Project,它接受一个HTML 片段和白名单 可以包含哪些值。这与 SO 和 slashdot.org 等网站用于保护提交内容的方法相同,并且是一种更安全的接受标记内容的方法。
【讨论】:
【参考方案4】:coldfusion 和几乎所有语言中的字符串清理都非常重要,并且取决于您要对字符串执行的操作。大多数缓解措施适用于
将内容保存到数据库(例如<cfqueryparam ...>
)
使用内容显示在下一页(例如,将 url-parameter 放在链接中或在文本中显示 url-parameter)
保存文件并使用上传文件名和内容
如果您遵循通过在第一步中基本上允许所有内容来防止和减少字符串的想法,然后通过删除或替换字符(黑名单方法)“清除”恶意代码,则总是存在风险。
更好的解决方案是用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。
【讨论】:
以上是关于Coldfusion 9中的清洁字符串/输入的主要内容,如果未能解决你的问题,请参考以下文章
本地主机上 ColdFusion 9 和 ColdBox 中的 NullPointerExceptions
在 ColdFusion 9 中使用 Flash 表单时出现 JavaScript 错误
更改 CF9 中的 OnRequestEnd 行为(是 ColdFusion 9 错误 - 无法在 OnRequestEnd 中引用请求变量)