首先,我发现了几个相似的主题,但并不能完全回答我的所有问题。
如果我使用这样的代码,我的第一个问题是:
MySqlCommand cmd = new MySqlCommand("SELECT `productnummer`, `NAAM`, `TYPE` `OMSCHRIJVING`, `Product-ID`, `Barcode` FROM `orders`.`producten` where (`productnummer` like(@variable) or `naam` like @variable or `type` like @variable or `omschrijving` like @variable or `product-id` like @variable or `barcode` like @variable) "and `uit assortiment` = 0");
cmd.Parameters.Add(new MySqlParameter("@variable", '%' + textBox1.Text + '%'));
如果我可以用 % which 定义我的 sql 变量(据我所知是一种 sql 语法),参数如何才能安全。这是否意味着如果用户输入 % 或 * 或他们自己的东西,它会起作用吗?
我的第二个问题:
MySqlCommand cmd = new MySqlCommand("SELECT `user-id` FROM `orders`.`werknemers` WHERE username = @username and `password` = @password");
cmd.Parameters.Add(new MySqlParameter("@username", username));
cmd.Parameters.Add(new MySqlParameter("@password", password));
如果我有一个包含用户名和密码(显然是密码哈希)的表的数据库。我的应用程序有一个文本框,用户可以在其中输入用户名和密码。密码将被散列,并且该数据将被发送到数据库,如上所示。如果数据库返回一个用户 ID,我知道该用户存在并且我可以使用该用户 ID 进行进一步通信,如果不是很明显,输入错误
这是一种安全的方法吗?还是有更好的方法?
一般来说,这一切都归结为:在 C# 中与数据库进行通信的最安全方式是什么?