我有幾個關於連接到C#中的MySql數據庫的問題。C#連接數據庫和安全輸入數據
我作出數據庫的連接基於本教程YouTube上https://www.youtube.com/watch?v=IH0dYO8QOow但我在評論readed波紋管視頻是這種做法是vunearable到MySql注射。
我PHP中的PDO工作準備語句在MySQL中,現在我想知道:
- 是最好把自己與XAMPP,WAMP本地主機服務器....或安裝Microfost的Sql服務器
- 如何使查詢-S和預處理語句在C#和如何使它安全
我使用Microsoft SQL Server 2014創建數據庫。
請不要給我一個負面的分數,因爲我是新來的C#和想學習,我聽說這是最好的地方問一個問題,並得到適當的幫助。
這裏是簡單登錄表單的代碼,連接到數據庫並檢查有效的用戶名和密碼,如果一切正常,它會打開新窗口並隱藏登錄表單。
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
// connect to a database
SqlConnection connection = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Mario\Documents\mojaBaza1.mdf;Integrated Security=True;Connect Timeout=30");
// make new query
SqlDataAdapter sda = new SqlDataAdapter("SELECT COUNT(*) FROM users WHERE username = '" + textBox1.Text + "' AND password = '" + maskedTextBox1.Text + "'",connection);
// fetch data from table
DataTable dt = new DataTable();
sda.Fill(dt);
// check query for result, if returned 1 login
if (dt.Rows[0][0].ToString() == "1")
{
// hides new window
this.Hide();
// instance of new window when user log in
Main ss = new Main();
// show new window
ss.Show();
}
else
{
// error message if user entered invalid data
MessageBox.Show("Invalid username or password, please try again.");
}
}
}
}
是的,這是很容易受到SQL注入,因爲您正在使用文本框中的直接輸入。改用參數化查詢。 – Andrew
你的意思是你使用SQL Server Management Studio來設置你的MySQL數據庫嗎? –
'「我在PHP中使用PDO在MySql中準備語句」 - 語法不同,但概念相同。 *永遠不會*直接連接用戶輸入到SQL代碼。改用參數。這在不同的編程語言之間不會改變。 PHP可能調用「準備語句」C#可能改爲調用「參數化查詢」。 – David