1

我有以下表格,如果以下任何条目不正确,我想给用户提醒。在哪里可以在代码下方添加我的异常?

在此处输入图像描述

我的代码:

 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;
                }
            }
        }
  }
4

1 回答 1

3

我只是再次查看了代码,这完全是一场灾难。所以你告诉我应用程序建立的连接可以访问 DBA_Users 表?这是一面巨大的红旗。

你应该:

  • 创建一个模式,它将成为您的应用程序模式

  • 在连接字符串中为该架构使用 pwd 和用户名,对其进行加密,用户无法访问

  • 在您的应用程序中有一个表,它不仅称为“用户”,而且还称为“users1f0tm34m”。

  • 使用该表来验证您的应用程序传入用户。

基本上,您将使用应用程序加密的 conn 字符串建立连接。这是您检查连接是否正确的地方。如果用户凭据正确,第二次检查将针对您的表。

现在,你需要停止争论:

"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 推荐的方式,而您所做的是 Oracle 不推荐的动态 SQL。

如果你的公司曾经有过审计,你就完蛋了。

于 2013-09-14T01:30:51.913 回答