如何使这三条语句在SQL注入时更加安全
本文关键字:注入 SQL 安全 语句 何使这 三条 | 更新日期: 2023-09-27 17:49:00
1
$con = mysql_connect("localhost","","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("jbell2", $con);
$sql="INSERT INTO Profile (username, Date, Height, Weight, WaistSize, WeightforHeight, Blood_Pressure, Medication, Total_Cholesterol, Bad_Cholesterol, Good_Cholesterol, Triglycerides,KidneyFunctionTest)
VALUES
('$_Post[username]', '$_POST[Date]', '$_POST[Height]', '$_POST[Weight]', '$_POST[WaistSize]','$_POST[WeightforHeight]', '$_POST[Blood_Pressure]','$_POST[Medication]' ,'$_POST[Total_Cholesterol]' ,'$_POST[Bad_Cholesterol]' ,'$_POST[Good_Cholesterol]','$_POST[Triglycerides]','$_POST[KidneyFunctionTest]' )";
2
MySqlConnection con = new MySqlConnection("host="";user="";password=""; database="";");
con.Open();
MySqlCommand cmd = new MySqlCommand("INSERT INTO Patients(username, password, FirstName, SecondName, DiabetesType, Email,Phone, Phone2, Question1, Question2,TreatmentPlan)"
+ "values" + "('" + uname.Text + "','" + password.Text + "','" + fname.Text + "','" + lname.Text + "','" + Dtype.Text + "','" + email.Text + "','" + phone.Text + "','" + phone2.Text + "','" + q1.Text + "','" + q2.Text + "','" + treatment.Text + "')");
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();
在C#部分:
MySqlCommand cmd = new MySqlCommand("INSERT INTO Patients (username, password, FirstName,
//...
+ "values" + "('" + uname.Text + "','" + password.Text + "','" + fname.Text + "','" +
//...
+ "')");
这些值应该作为参数传入。你的命令文本应该这样构建:
MySqlCommand cmd = new MySqlCommand("INSERT INTO Patients (username, password, FirstName,
//...
+ "values (@username, @password, @FirstName,
//...
+ "')");
在这种情况下,你应该有这样的东西:
cmd.Parameters.AddWithValue("username", uname.Text);
cmd.Parameters.AddWithValue("password", password.Text);
cmd.Parameters.AddWithValue("FirstName", fname.Text);
//...
如果你不这样做,那你就麻烦多了。
虽然不了解PHP,但在C#
中,您可以使用Parameters,而不是直接注入值。
using (MySqlConnection con = new MySqlConnection("host="";user="";password=""; database="";"))
{
con.Open();
string strSQL = "INSERT INTO Patients(username, password, FirstName, SecondName, DiabetesType, Email,Phone, Phone2, Question1, Question2,TreatmentPlan) values (?name, ?password, .....)";
using (MySqlCommand cmd = new MySqlCommand(strSQL, con))
{
cmd.Parametrs.AddWithValue("?name", fname.Text);
cmd.Parametrs.AddWithValue("?password", lname.Text);
..........
cmd.ExecuteNonQuery();
}
}
只需让?
后面跟着一些标识符来标记您添加的参数,然后使用AddWithValue
来插入实际值
还展示了如何使用正确处理对象的using
。
首先,SQL
语言中没有任何单词。
在2和3中,您通过连接字符串来创建SQL Query
,这是错误的;在2中,您可以使用PDO
准备PDOStatement
对象并通过传递参数安全地执行它,在第二步中,您可能可以准备此查询并传递参数,但必须阅读文档才能做到这一点。
阅读以下内容:http://www.codinghorror.com/blog/2005/04/give-me-parameterized-sql-or-give-me-death.html
。在使用mysql_real_aescape_string((插入数据库之前,您应该至少真实地转义字符串。
在插入数据库之前,您应该始终验证您的数据。检查您是否获得了所需的数据,并替换应该获得的任何字符。