4

我最近一直在使用Coldfusion 9(主要是 PHP 的背景),我正在挠头,试图弄清楚如何“清理/清理”用户提交的输入/字符串。

我想让它成为 HTMLSAFE,消除任何 javascript 或 SQL 查询注入,通常。我希望我忽略了 CF9 已经附带的某种功能。

有人可以指出我正确的方向吗?

4

4 回答 4

7

好吧,对于 SQL 注入,您想使用CFQUERYPARAM

至于清理 XSS 等的输入,您可以使用CFAPPLICATION 中的 ScriptProtect 属性,尽管我听说这不能完美地工作。如果您愿意,可以查看Portcullis或类似的第 3 方 CFC 以获得更好的脚本保护。

于 2011-01-10T20:32:09.663 回答
6

这是对凯尔建议的补充而不是替代答案,但评论面板对于链接来说有点垃圾。

看看 ColdFusion字符串函数。你有 HTMLCodeFormat、HTMLEditFormat、JSStringFormat 和 URLEncodedFormat。所有这些都可以帮助您处理从表单发布的内容。

您也可以尝试使用正则表达式函数来删除 HTML 标记,但这从来都不是一门精确的科学。这个基于 ColdFusion 的 regex/html 问题应该会有所帮助。

您还可以尝试使用cfformprotect 之类的工具来保护自己免受机器人和已知垃圾邮件发送者的侵害,它将Project HoneypotAkismet保护以及其他工具集成到您的表单中。

于 2011-01-10T20:47:50.273 回答
1

你有几个选择:

  1. “全局脚本保护”管理员设置,对 post 和 get(即 FORM 和 URL)变量应用正则表达式以去除<script/><img/>以及其他几个标签
  2. 使用isValid () 来验证变量的数据类型(请参阅我对此的深入回答)。
  3. < cfqueryparam />,用于创建 SQL 绑定参数验证传递给它的数据类型。

需要注意的是,如果您真的想清理 HTML,请使用 ColdFusion 可以本地访问的 Java。特别是使用OWASP AntiSamy Project,它接受一个 HTML 片段并将哪些值列入白名单。这与 SO 和 slashdot.org 等网站用于保护提交内容的方法相同,并且是一种更安全的接受标记内容的方法。

于 2011-01-10T20:39:31.237 回答
0

在coldfusion和几乎任何语言中对字符串进行消毒都是非常重要的,这取决于你想对字符串做什么。大多数缓解措施是为了

  • 将内容保存到数据库(例如<cfqueryparam ...>
  • 使用内容显示在下一页(例如将 url 参数放在链接中或在文本中显示 url 参数)
  • 保存文件并使用上传文件名和内容

如果您遵循通过在第一步中基本上允许所有内容来防止和减少字符串的想法,然后通过删除或替换字符(黑名单方法)“清除”恶意代码,则总是存在风险。更好的解决方案是使用agains 正则表达式替换字符串,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

于 2018-03-12T22:32:48.917 回答