如何使这三条语句在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();

如何使这三条语句在SQL注入时更加安全

在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

选项2的

。在使用mysql_real_aescape_string((插入数据库之前,您应该至少真实地转义字符串。

在插入数据库之前,您应该始终验证您的数据。检查您是否获得了所需的数据,并替换应该获得的任何字符。