繁体   English   中英

如何使这三个语句对SQL注入更安全?

[英]How can I make these three statements more secure against SQL injection?

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();

关于PHP的Dunno,但是在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处置对象。

在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);
//...

如果您不这样做,那么您会遇到很多麻烦。

首先,您没有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_escape_string()插入数据库之前,您应该至少要真正地对字符串进行转义。

并且您应该始终在插入数据库之前验证数据。 检查您是否正在获取所需的数据,并替换您应获取的所有字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM