OracleDatareader似乎执行更新语句

时间:2014-01-07 21:34:46

标签: oracle ado.net odp.net

我使用的是oracle客户端11.2.0 Dll版本4.112.3.0

我们的应用程序中有一个页面,人们可以在其中提供sql语句和retreive结果。基本上做一个oracle command.executereader

最近我的一个团队成员发布了一个更新声明作为测试,它实际上对记录执行了更新!!!!

遇到过这种情况的人?

此致 希德。

2 个答案:

答案 0 :(得分:1)

这是正常的(虽然有点令人不安)行为。 ExecuteReader应该执行作为CommandText提供的sql命令,并构建一个用于循环结果的DbDataReader。
如果命令没有返回任何要读取的行,那么读者在任何情况下都不应该阻止它。因此,不期望它检查您的命令是否真的是SELECT语句 例如,如果传递存储过程名称或者要执行多个sql批处理,请考虑。 (INSERT后跟SELECT)

我认为这里最大的问题是您允许用户键入的任意sql命令到达数据库引擎。安全方面的一个很大的漏洞。在将代码提交到数据库引擎之前,您至少应该对查询文本执行一些分析。

答案 1 :(得分:0)

我同意史蒂夫。您的读者将执行任何命令,如果它不是选择并且不返回结果集,可能会有点混淆。

要阻止人们修改任何内容,请创建一个新用户,在表上向该用户授予select select(无更新,不删除,不插入)(grant select on tablename to seconduser)。然后,以seconduser身份登录,并为您的表创建同义词(create synonym tablename for realowner.tablename)。连接到DB时,您的应用程序是否使用了seconduser。这可以防止人们“黑客”你的网站。如果你想成为安全的一方,除了create session之外,不向第二个用户授予权限,以防止他创建表,丢弃你的观点和类似的东西(我猜你的executereader不允许DDL,但是测试它以确保)。