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_*関数を避けようとする、使用しようとするmysqli、またはPDO

于 2012-10-12T03:50:02.060 に答える
0

あなたが見ているのは、SQL インジェクションの基礎です。スラッシュを削除すると、入力はまったくエスケープされません。'; UPDATE users SET password WHERE username="admin"攻撃者が入力文字列を提供してクエリを閉じ、新しいクエリを?で開始した場合、どうなるか想像してみてください。

少なくとも、入力を でエスケープする必要がありますmysql_real_escape_stringが、実際にはmysql拡張機能の使用を停止する必要があります。mysqli代わりに、拡張機能の準備済みステートメントを使用してください。

于 2012-10-12T03:59:59.937 に答える