当我尝试运行此代码时:
<?php
$str = "Patty O'Furniture";
if(get_magic_quotes_gpc())
echo stripslashes($str);
?>
输出为Patty O'Furniture
但是当我尝试运行此代码(将数据上传到数据库表)时
<?php
if ($_FILES[csv][size] > 0) {
//get the csv file
$file = $_FILES[csv][tmp_name];
$handle = fopen($file,"r");
//loop through the csv file and insert into database
do {
if ($data[0]) {
if(get_magic_quotes_gpc())
mysql_query("INSERT INTO sms_recipient (store_id, recipient_name, recipient_phone) VALUES
(
'".$login_id."',
'".stripslashes($data[0])."',
'".stripslashes($data[1])."'
)
");
}
} while ($data = fgetcsv($handle,1000,",","'"));
//
}
?>
仅输出Patty O
。 (见截图)
我不确定为什么当我尝试使用函数stripslashes
将数据保存到数据库时,它无效。
答案 0 :(得分:1)
因为您正在撤消magic_quotes尝试执行的操作。
当magic_quotes打开时,所有'(单引号),(双引号),\ (反斜杠)和NUL会自动使用反斜杠进行转义。
因此,您要删除正在添加的stripslashes
的反斜杠,并在查询到达'
中的O'Furniture
答案 1 :(得分:0)
答案 2 :(得分:0)
您所看到的是SQL Injection的基础。删除斜杠后,您的输入根本不会被转义。想象一下,如果攻击者提供的输入字符串关闭了您的查询并开始使用'; UPDATE users SET password WHERE username="admin"
新的查询,会发生什么?
至少,您需要使用mysql_real_escape_string
转义输入,但实际上您需要停止使用mysql
扩展名。请改用mysqli
扩展名的预备语句。