在不使用 cfqueryparam 的情况下防止 SQL 注入

Prevent SQL injection without using cfqueryparam

我有一些旧项目包含很多查询,这些查询没有使用 cfqueryparam 来防止 SQL 注入。有什么方法可以使用某些功能在每个表单字段的应用程序级别上做类似的事情吗?

作为具有 PHP 背景的初学者,我认为我可以循环发布数据并执行 escape_string() 或类似操作。但我不希望数据以转义形式保存。我认为 cfqueryparam 不会以转义形式保存数据。 (我还没有尝试过。我是 CF 的新手。)否则,我必须在每次检索时将数据转义,这是我不想做的。我希望按原样插入和检索输入。

基本上我只是希望它在应用程序级别完成,这样我就不必在每个项目上一一更改数千个查询。

示例输入

it's my book
user@gmail.com'; delete database --

我曾在三个不同的公司工作过,它们必须完全冻结项目并分配所有开发人员更新对查询和存储过程的调用。有些人甚至不得不雇用承包商来做几个月。你将不得不硬着头皮手动完成它们。

您可以借此机会删除一堆冗余查询,将它们替换为存储过程并将它们移至 CFC。这将允许您重复使用来自单一来源的查询并减少您必须完成的工作总量。

您可以放置​​ Web 应用程序防火墙 (WAF) 来处理来自外部的一些请求,但它们不是 100%。根据您的客户,代码必须在不使用 WAF 的情况下防止 SQL 注入。

您可以查看 FuseGuard 了解一下。它是一个 ColdFusion Web 应用程序防火墙,它过滤的内容之一是 SQL 注入攻击。

硬着头皮将所有查询更改为使用 cfqueryparam 会更安全,但 FuseGuard 比修复大型应用程序更便宜并且可以快速启动 运行。

当我的团队 运行 遇到您的情况时(接管了一个包含数千个未受保护查询的现有应用程序),我们安装了 FuseGuard,然后开始处理查询,因为我们有时间。

我与 FuseGuard 没有任何经济联系 - 只是一个满意的客户。