我有以下表格,如果以下任何条目不正确,我想提醒用户。哪里可以在代码下面添加我的例外?
mycode的:
public static void GetTables(Members src)
{
OracleConnection conn1 = MyConnectionClass.GetConnection(src.DB, src.ID, src.Password);
conn1.Open();
using (OracleCommand command= new OracleCommand("SELECT * FORM DBA_USERS WHERE USER NAME=" + src.ID + " and PASSWORD=" + src.Password + "", conn1))
{
using (OracleDataReader reader = command.ExecuteReader())
{
int count = 0;
while (reader.Read())
{
count = count + 1;
}
}
}
}
答案 0 :(得分:3)
我只是再次查看代码,这是彻底的灾难。 所以你告诉我应用程序建立的连接可以访问DBA_Users表吗?这是一个很大的红旗。
你应该:
创建一个将成为您的应用程序架构的架构
在连接字符串中使用该架构的pwd和用户名,加密,用户无法访问
具有不仅仅是“用户”而是“users1f0tm34m”之类的表。
使用该表来验证您的应用程序传入用户。
基本上,您将使用应用程序加密的连接字符串建立连接。这是您检查连接是否正确的地方。如果用户凭据正确,则第二次检查将针对您的表。
现在,您需要停止对此的争论:
"SELECT * FROM DBA_USERS WHERE USERNAME=" + src.ID + " and PASSWORD=" + src.Password + ""
除了SQL注入之外,还有优化。上面的代码将导致oracle优化器在下次用户登录时为查询创建计划。为避免这种情况,您需要通过参数使用绑定变量:
SELECT * FROM DBA_USERS WHERE USERNAME=:uname and PASSWORD=:pwd
这是Oracle推荐的方法,您所做的是动态SQL,这是Oracle不推荐的。
如果您的公司有过审核,那么您已经熟了。