这是我的SQL查询,我想让它免费注入SQL
$q1="insert into ecat_user(login_id,password,fullname,gender,disp_name,dob,";
$q1.="street_addr,city,country,zip,email,aol,msn,icq,yahoo,homepg_link,homepg_caption,description,";
$q1.="legal_guardian,phoneno,promotioncode,user_type,height,weight,chest,waist,inseam,eyecolor,haircolor,";
$q1.="shoesize,biceps,collar,experience,travel,notes,added_on,updated_on) values('$modelName','$password','$firstName',";
$q1.="'$gender','$description','$dob','$streetAddress','$city','$country','$zipCode','$emailAddress',";
$q1.="'$aolID','$msnID','$icqID','$msnID','$homePage','$homePageCaption','$description','$legalGuardian',";
$q1.="'$phoneNumber','$promotionalCode','','','','','','','','','','','','','','','','')";
mysql_query($q1, $Conn);
$id = mysql_insert_id();
请建议。
答案 0 :(得分:6)
答案 1 :(得分:0)
这实际上取决于你如何获得变量。
最好和最安全的方法是使用准备好的陈述。您可以使用mysql_*
语句执行这些操作,但使用PDO可能是更好的选择。
这是在PDO中使用预准备语句的一个例子:
<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();
$sth->execute(array(':calories' => 175, ':colour' => 'yellow'));
$yellow = $sth->fetchAll();
?>
您的想法是准备语句 - 告诉数据库它应该期待什么,然后在执行语句期间使用数组将参数传递给它。任何有趣的事情都会被排除在外。
答案 2 :(得分:0)
用占位符替换所有值,并在发送之前准备语句。例如PDO。
答案 3 :(得分:0)
您有两个选项 - 转义unsafe_variable中的特殊字符,或使用参数化查询。两者都可以保护您免受SQL注入。参数化查询被认为是更好的实践,但是在变量中转义字符将需要更少的更改。
在上面的文章中清楚地描述和清除了这一点,请完整地完成它。