如何绕过Javascript中的sql注入错误

Posted

技术标签:

【中文标题】如何绕过Javascript中的sql注入错误【英文标题】:How to bybass sql injection error in Javascript 【发布时间】:2020-04-13 14:16:25 【问题描述】:

尝试在 javascript 中运行以下代码时出现 sql 注入错误。我正在尝试使用参数或某些占位符来更新此方法以绕过注入错误,但我不确定。问题是,由于要创建一个安全的网站,下面连接为“i”的变量可以用一个参数替换,这样网站在从数据库中选择记录时就不会受到攻击。我已经在 php 中看到了对这种注入的修复,就像下面文章中的一个试图了解如何在 Javascript 中解决这个问题。在下面的“我”可能是“名字”。即,Select name as overday_disolay from country,取用户在表单中输入的名称,并将占位符“i”替换为用户提供的“名称”。下面的文章解释了更多,但它不是 javascript 中的修复(我不能使用文章中使用的相同功能,所以我需要在 Javascript 中解决)。应用程序抛出注入错误。

https://www.acunetix.com/websitesecurity/sql-injection/

 function getUnionDataSql()

    var sql = "";

    sql += " SELECT DISTINCT "+ i+ " AS overday_display FROM country UNION"

【问题讨论】:

绕过?为什么不修复代码? JavaScript 在哪里执行? Node.js? @DanMcGhan 该脚本嵌入在 xml 中并输出到 jsp,因为我使用的应用程序是基于 Java 的。不确定您是否听说过“Archibus”。是的,我仍然可以使用 Java 来运行 sql 语句并调用 java 类作为工作流,但是这次脚本是在 javascript 中,我只想能够在 javascript 中获得一个函数,它允许我使用参数而不是变量在我的 sql 语句中 看看这个,如果它回答了你的问题,请告诉我:github.com/oracle/node-oracledb/issues/946 适用于 Node.js,但同样的规则适用于任何地方。 @DanMcGhan 对此表示感谢。这可能会有所帮助,但我最终通过在内部更新应用程序中的配置找到了出路。 【参考方案1】:

您不应将变量直接传递到您的 SQL 语句中。这将允许用户在您的 SQL 语句中插入恶意代码。

因此,您应该提前使用 SQL 包的转义函数来避免这种情况。

【讨论】:

谢谢 Marvin,我知道我不能传递这样的变量,这正是我问是否有一个函数可以在 Javascript 中的 oracle 中使用的原因。上面的链接显示了它在 PHP 中的处理方式。此链接还显示了 java 和其他 3 种语言的修复程序,但我正在寻找一种方法来在指向 oracle DB 的 JavaScript 中做到这一点【参考方案2】:

我能够解决这个问题。内部应用程序中允许有 2 个选项。一种是使用子字符串或使用参数代替上述变量。另一种是在应用程序中配置保留字。

【讨论】:

以上是关于如何绕过Javascript中的sql注入错误的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入防御与绕过的几种姿势

【模拟环境】SQL注入时如何绕过逗号和百分号

sql注入 form过滤怎么绕过

SQL注入中的WAF绕过

SQL注入绕过防火墙的9种基本方法

如何手动绕过SQL注入过滤器?