0

当我尝试运行此代码时:

<?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时它不起作用。

4

3 回答 3

1

因为您正在撤消magic_quotes试图做的事情。

当 magic_quotes 打开时,所有 '(单引号)、"(双引号)、\(反斜杠)和 NUL 都会自动使用反斜杠进行转义。

因此,您将通过添加的反斜杠删除反斜杠,并在stripslashes查询到达时缩短查询'O'Furniture

于 2012-10-12T03:52:23.943 回答
0

使用mysql_real_escape_string()函数代替stripslashes()

或者

尽量避免mysql_*使用函数,尝试使用mysqliPDO

于 2012-10-12T03:50:02.060 回答
0

您所看到的是SQL Injection的基础。删除斜线后,您的输入根本不会转义。想象一下,如果攻击者提供了一个输入字符串来关闭您的查询并开始一个新的查询,会发生什么'; UPDATE users SET password WHERE username="admin"

至少,您需要使用 转义您的输入mysql_real_escape_string,但实际上您需要停止使用mysql扩展。mysqli改用扩展的准备好的语句。

于 2012-10-12T03:59:59.937 回答