0

フォームを使用してMySQLにデータを入力しようとしていますが、mysql_real_escape_stringこの目的にも使用しています。残念ながら、出力に問題があります。\s が表示されます。使用するstripslashesと、すべてのスラッシュが削除されます。

送信するweb's forms using backslash \と、次の出力が得られます。

"web\'s forms using backslash \\"

バックスラッシュが二重になっているのを見てください。しかし、stripslashes関数を使用すると、すべてのスラッシュが削除されますが、入力されたスラッシュも削除され、出力は

"web's forms using backslash"

ここでは、バックスラッシュは表示されませんが、最後にバックスラッシュが 1 つ必要です。

問題は、誰かがパスワード フィールドやその他のフィールドでバックスラッシュを使用すると、バックスラッシュが削除されるか、2 回表示されることです。

4

3 に答える 3

4

魔法の引用符がオンになっています。これらはセキュリティ上良くないため、完全に無効にする必要があります。

offそれらをphp.ini から設定します(推奨):

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off

または、実行時に無効にすることもできます:

if (get_magic_quotes_gpc())
{
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process))
    {
        foreach ($val as $k => $v)
        {
            unset($process[$key][$k]);
            if (is_array($v))
            {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            }
            else
            {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}
于 2011-01-17T05:58:30.480 に答える
0

mysql にデータを安全に入力する方法

「PHP を使用して mysql にデータを安全に入力する方法」を使用してデータを挿入する際の問題</p>

predecessors( ) よりも安全で高速な PDO (新しい改良された方法) の準備済みステートメントを使用する必要がありますmysql_real_escape_string, etcデータベース アクセスに PHP の PDO を使用する必要がある理由については、さらに詳しく説明しています。

出力の表示

問題は、誰かがパスワード フィールドやその他のフィールドでバックスラッシュを使用すると、バックスラッシュが取り除かれたり、2 回表示されたりすることです。

新しく改善された方法は、filterを使用することです。特に、PHP の作成者である Rasmus Ledorf によるパフォーマンスとセキュリティのスライドをすべて読むことをお勧めします。http://talks.php.net/には、一般的に見るべき良いスライドがたくさんあります。

于 2011-01-17T07:10:36.647 に答える
0

mysqli ライブラリとプリペアド ステートメントを使用します。次に、すべての文字がデータとして入力され、これらすべてをいじる必要はありません。

mysqli の準備済みステートメントでエスケープされない文字は?

一般的なエスケープ関数を使用するよりも、mysql のプリペアド ステートメントを使用する方が安全なのはなぜですか?

于 2011-01-17T06:00:22.757 に答える