删除存储在数据库中的C#散列组合框项目(Remove combo box items that st

2019-10-21 03:37发布

我有一个关于该验证数据库中的散列文本的问题。 眼下,已在数据库中注册用户类型进行散列像下面的图片:

我希望它时,有存储哈希数据库管理员文本,程序将验证哈希和检查验证管理员文本。 如果是的话,那么它会直接删除在组合框列表的管理员文本。

为什么我通过哈希存储在用户类型数据库的原因,是我限制其他用户类型完全进入到系统并防止黑客对用户类型更改为除管理员(如果我保存它由纯文本只)在数据库中,一旦他们发现了它。

上面的图片显示,用户类型已被散列,那就是散列文本是针对用户类型管理员。

现在,我是添加和存储散列用户类型,以这样的数据库:

public static void AddDatabase(string _selectedIndex)
        {
            using (OleDbConnection connection = new OleDbConnection(connectionString))
            {
                string query = "INSERT INTO [Member] ([UserType]) VALUES (@UserType)";

                connection.Open();

                _hashedType = BCrypt.CreateHash(_selectedIndex, BCrypt.GenerateSalt(12));

                using (OleDbCommand command = new OleDbCommand(query, connection))
                {
                    command.Parameters.Add("@UserType", OleDbType.VarChar);
                    command.Parameters["@UserType"].Value = _hashedType;
                    command.ExecuteNonQuery();
                }

                connection.Close();
            }
        }

void button2_Click(object sender, EventArgs e)
        {
  SystemManager.AddDatabase(this.comboBox1.Text);
        }

void Registration_Load(object sender, EventArgs e)
        {
            if (SystemManager.CheckType("Administrator") != true)
            {
                this.comboBox1.Items.Add("Administrator");
            }

            this.comboBox1.Items.Add("Member");

            this.comboBox1.SelectedIndex = 0;
        }

为了验证它,我使用它就像下面的代码。 但是,当我运行程序,一切都成了空(组合框下拉列表不显示任何东西(空文本)像下图):

public static bool CheckType(string _value1)
        {
            using (OleDbConnection connection = new OleDbConnection(SystemManager.connectionString))
            {
                string query = "SELECT COUNT(*) FROM [Member] WHERE [UserType] = @UserType";

                connection.Open();

                using (OleDbCommand command = new OleDbCommand(query, connection))
                {
                    command.Parameters.Add("@UserType", OleDbType.VarChar);
                    command.Parameters["@UserType"].Value = BCrypt.ValidateHash(_value1, _hashedType);

                    _count = (int)command.ExecuteScalar();

                    connection.Close();
                }

            }

            return _count > 0;
        }

非常感谢你!

我真的很感激你的答案

Answer 1:

两件事情:

首先,由于您展示的代码包含字符串“会员”到您的组合框无条件添加,那么可以肯定,要么方法不会被调用所有,或一些代码后来被清除组合框。 你没有发布完整的足够的样本为别人知道哪个是正确答案,所以你必须要调试自己。 通过把一个断点方法,以确定是否它被称为在所有启动。

第二,我怀疑使用哈希值,以确保对某人改变值的这个整体战略。 如果他们对数据库的访问,并可以修改它的元素,他们有他们需要的一切。 哈希敏感信息才是有用的,当你可以假设存储的哈希本身不能被修改的,你想要求别人提供一些数据(如密码),这只有他们自己知道,这样你可以散列数据并比较一下存储的散列。 当然还有使用安全散列时,这仅适用。

无盐,如果我是攻击者,我必须对数据库的访问,我想一个用户的类型更改为不同的东西,我需要做的就是复制在同类型的其他一些用户我觉得值我想将其更改为。 在这里,您盐,但即使这样也无济于事,如果是攻击者的我知道正在使用的盐和散列算法(两条信息您所​​提供)的; 我可以从头开始生成随意的哈希值。

如果你想在数据库安全反对的变化,你需要不要让攻击者改变它摆在首位。



文章来源: Remove combo box items that stored as hashed in the database c#