我不知道为什么,但这不起作用:
我正在工作的Ajax发送,我已经发送了一个值到PHP脚本,它解析的值,并存储在一个php变量的值。现在:
$id = $_GET['id'];
$url = $_GET['url'];
$check = $_GET['check'];
$filid = mysql_real_escape_string($id);
$filurl = mysql_real_escape_string($url);
if($check == 'true'){
$insert = "INSERT INTO tab (id,url) VALUES ('$filid','$filurl')";
mysql_query($insert) or die(mysql_error());
}我确认我的Ajax代码正在工作,我不确定php.When我删除了if语句并直接将数据放到我的数据库中,它正在工作。
我是新来的,请忍耐一下。我希望有人能指出我的错误是什么。
谢谢!
发布于 2011-08-18 21:50:56
亲爱的上帝啊!我不敢相信,到目前为止,没有一个答案指出了原始代码中庞大的SQL注入向量;老实说,为了数据库的安全性,if块没有像您最初预期的那样工作!
您必须清理、转义和清理来自用户的所有数据;如果做不到这一点,您的数据库将很容易受到SQL injection攻击。如果这对你来说是新的,那么我建议你阅读some articles,并可能投资a book on the subject。
PHP包含一个名为mysql_real_escape_string()的函数,它将为您整理值,您应该将您的SQL语句修改为:
$clean_id = mysql_real_escape_string($id);
$clean_url = mysql_real_escape_string($url);
$insert = "INSERT INTO tab (id,url) VALUES ('$clean_id','$clean_url')";为了避免记住这样的事情,我建议您研究一下数据库抽象层,它将为您处理这一问题;尽管有很多其他包,如doctrine,但MDB2是一个流行的包。
发布于 2011-08-18 21:42:03
如果$check是布尔值(或在比较中计算为布尔值):
if($check == true){ 或者更好的是,只要:
if ($check) {发布于 2011-08-18 21:42:30
我认为您可能希望检查true,而不是'true' -您要查找的是碰巧拼写为true的文本字符串,而不是布尔值true/false。
https://stackoverflow.com/questions/7108343
复制相似问题