使用参数__ID__可以进行SQL注入

问题描述 投票:0回答:1

我正在使用 ZAP 对 Nextjs 14 Web 应用程序执行扫描,但遇到了此安全问题:

891940024
田野 详情
风险级别
漏洞 SQL 注入 - SQLite
描述 SQL 注入是可能的。
网址 https://example.company.com/portal/_next/static/chunks/app/(private)/(with-page-layout)/account/page-716b952001ffc4b9.js
方法 获取
参数 __ID__
攻击 case randomblob(1000000) 当不为空时则 1 else 1 end
证据 使用参数值[case randomblob(1000000) when not null then 1 else 1 end]可以控制查询时间,这导致请求花费[654]毫秒,参数值[case randomblob(10000000) when not null then 1 else ] 1 end ],这导致请求花费了 [851] 毫秒,而原始未修改的查询的值为 [private] 花费了[525] 毫秒。
其他信息 使用参数值[case randomblob(1000000) when not null then 1 else 1 end]可以控制查询时间,这导致请求花费[654]毫秒,参数值[case randomblob(10000000) when not null then 1 else ] 1 end ],这导致请求花费了 [851] 毫秒,而原始未修改的查询的值为 [private] 花费了[525] 毫秒。
实例 1
解决方案 不要信任客户端输入,即使有客户端验证。
一般情况下,类型检查服务器端的所有数据。
如果应用程序使用JDBC,请使用PreparedStatement或CallableStatement,参数通过'?'传递。
如果应用程序使用 ASP,请使用具有强类型检查和参数化查询的 ADO 命令对象。
如果可以使用数据库存储过程,请使用它们。
不要 将字符串连接到存储过程中的查询中,或者使用“exec”、“exec instant”或等效功能! 不要使用简单的字符串连接创建动态 SQL 查询。
转义从客户端收到的所有数据。
在用户输入中应用允许的字符的“允许列表”或不允许的字符的“拒绝列表”。
通过尽可能使用权限最小的数据库用户来应用最小权限原则。
特别要避免使用“sa”或“db-owner”数据库用户。这并不能消除 SQL 注入,但可以最大限度地减少其影响。
授予应用程序所需的最小数据库访问权限。
参考 OWASP SQL 注入预防备忘单
CWE ID
WASC ID
插件 ID
在向数据库发出请求之前,我已尝试清理在服务器上找到的任何资源的 ID,但问题仍然存在。

这个 __ID__ 参数必须由 next.js 生成,可能是动态页面。这是误报吗?有谁遇到过这个安全问题并可以给我解决的提示吗?

next.js sql-injection owasp zap
1个回答
0
投票
我也有同样的问题。 Nextjs chunks url 返回 SQL 注入错误

© www.soinside.com 2019 - 2024. All rights reserved.