创建命令命令ORA-01036:非法变量名/数异常
本文关键字:命令 异常 变量名 非法 ORA-01036 创建 | 更新日期: 2023-09-27 18:04:57
我正在修复一些工具报告的SQL注入缺陷。我们的应用程序正在从xml读取Oracle查询。查询如下所示…
<CommandText>create user &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"}
有谁能帮我一下吗?我在这里做错了什么?谢谢。
为了防止有人利用这段代码,您应该检查是否保存了输入的值。Oracle提供了DBMS_ASSERT包来为您完成此操作。
我要做的是创建一个接受用户名作为参数的存储过程。这个存储过程将为您创建数据库用户。如果没有使用
进行SQL注入,则存储过程将验证参数。DBMS_ASSERT.QUALIFIED_SQL_NAME ();
您的代码将把输入绑定到调用该存储过程。查看DBMS_ASSERT包http://docs.oracle.com/database/121/ARPLS/d_assert.htm#ARPLS65375
我不明白的是你为什么要动态地创建用户…