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

时间:2015-07-27 12:52:51

标签: c# plsql oracle11g

我正在修复某些工具报告的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"}

任何人都可以帮助我。我在这里做错了什么?

感谢。

1 个答案:

答案 0 :(得分:0)

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

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

的SQL注入,存储过程将验证参数
DBMS_ASSERT.QUALIFIED_SQL_NAME ();

您的代码会将输入绑定到调用该存储过程。

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

我不明白为什么你想要动态创建用户......