我正在修复某些工具报告的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"}
任何人都可以帮助我。我在这里做错了什么?
感谢。
答案 0 :(得分:0)
为防止有人利用此代码,您应检查输入的值是否已保存。 Oracle提供了DBMS_ASSERT包来为您完成此任务。
我要做的是创建一个接受用户名参数的存储过程。此存储过程将为您创建数据库用户。 如果没有使用
的SQL注入,存储过程将验证参数DBMS_ASSERT.QUALIFIED_SQL_NAME ();
您的代码会将输入绑定到调用该存储过程。
查看DBMS_ASSERT包http://docs.oracle.com/database/121/ARPLS/d_assert.htm#ARPLS65375
我不明白为什么你想要动态创建用户......