创建命令命令ORA-01036:非法变量名/数异常

本文关键字:命令 异常 变量名 非法 ORA-01036 创建 | 更新日期: 2023-09-27 18:04:57

我正在修复一些工具报告的SQL注入缺陷。我们的应用程序正在从xml读取Oracle查询。查询如下所示…

<CommandText>create user &amp;USERNAME identified externally</CommandText>

程序中,查询修改如下…

create user User_05 identified externally

我被要求添加参数语句以避免SQL注入。所以我做了类似的事情,如下所示…

OracleCommand command = connection.CreateCommand();
command.CommandText = "create user :USERNAME identified externally";
string attrName = "USERNAME";
string valueToBePut = "User_05";
command.Parameters.Add(new OracleParameter(attrName, valueToBePut));
command.ExecuteNonQuery();

和当我试图执行查询时。它失败了,有以下异常:

{"ORA-01036: illegal variable name/number"}
有谁能帮我一下吗?我在这里做错了什么?

谢谢。

创建命令命令ORA-01036:非法变量名/数异常

为了防止有人利用这段代码,您应该检查是否保存了输入的值。Oracle提供了DBMS_ASSERT包来为您完成此操作。

我要做的是创建一个接受用户名作为参数的存储过程。这个存储过程将为您创建数据库用户。如果没有使用

进行SQL注入,则存储过程将验证参数。
DBMS_ASSERT.QUALIFIED_SQL_NAME ();
您的代码将把输入绑定到调用该存储过程。

查看DBMS_ASSERT包http://docs.oracle.com/database/121/ARPLS/d_assert.htm#ARPLS65375

我不明白的是你为什么要动态地创建用户…