Oracle 数据库和 .NET (C#) - 如何防止 SQL 注入

Posted

技术标签:

【中文标题】Oracle 数据库和 .NET (C#) - 如何防止 SQL 注入【英文标题】:Oracle Database and .NET (C#) - How to prevent SQL Injections 【发布时间】:2013-04-18 00:17:56 【问题描述】:

我将在 asp.net 页面中使用一个选择,即:

string name=TexBox1.Text;
string pas=TextBox2.Text;
string c="select * from users where name='"+name+"' and password ='"+pas+"'";

有什么方法可以防止 sql 注入。

【问题讨论】:

使用准备好的语句。 你能举个例子吗? 另外,切勿将密码本身存储在数据库中。始终使用加盐的密码哈希,可能使用 Oracle 的 DBMS_CRYPTO PL/SQL 包。见***.com/questions/8339107/… Microsoft article on prepared statements 哈希总是很好吃,尤其是加一点盐:) 【参考方案1】:

首先,您必须验证代码中的输入数据,然后像参数一样使用它。 因为如果发生未处理的异常并且您返回诸如“连接字符串”之类的敏感数据,那么您将提供有用的信息,例如“列”和“表”名称,这是危险的。 其次,添加“数据访问层”来处理不在“代码隐藏”中的代码。您可以使用“存储过程”并从代码中调用它们,使用这种方式可以隐藏编程逻辑的查询,只将参数传递给存储过程,他完成这项工作,你只在出现异常的情况下返回错误发生。

这种预防措施是小型应用程序的基础,但存在许多其他方法来避免 SQL 注入。

【讨论】:

我正在处理重要数据,所以我将使用散列或其他强大的方法,谢谢你的想法,对不起,我耽误了你的时间 哈希仅适用于密码,如果发生任何错误,您将返回敏感数据,如表和列名,这就是 SQL 注入。如果您没有时间避免 sql 注入,我建议您验证输入,希望对您有所帮助;-)

以上是关于Oracle 数据库和 .NET (C#) - 如何防止 SQL 注入的主要内容,如果未能解决你的问题,请参考以下文章

C# 中不同数据库(如 Oracle 和 SQL Server)之间的 Sql 查询 [关闭]

C# 访问Oracle数据库

由于C#中ADO.NET对Oracle的命名空间引用时提示过时,为此想用Linq对数据库的连接等操作(见补充)

使用 C# .NET 访问 Oracle 多维数据集中的 OLAP 数据?

.NET(C#) Dapper Oracle(ODP.NET)或SQL Server 执行多条查询(select)语句的方法代码

如何使用 Oracle 和 SQL Server 将 .NET 4.5 C# Entity Framework 6 中的列映射为大写?