0

");--入力フィールドから localhost PHP サーバーに送信すると、自動的に次のように変換されます。

\");--

この動作がどれほど信頼できるかわからないことを除けば、それは素晴らしいようです。SQL インジェクションを回避しているように見えますが、私の開発環境は本番環境と同じではなく、本番環境ではこの種の保護が自動的にアクティブ化されないのではないかと心配しています...

なぜPHPはこれを行うのですか(を使用せずに入力を変換しますmysql_real_escape_string)? それは常にそれを行いますか、それとも特定の拡張機能でのみ行いますか? SQL インジェクションを防ぐためにこの動作に頼るのは安全ですか?

4

4 に答える 4

6

マジック クォートが有効になっているようです。ただし、このオプションを無効にするか、元に戻すことをお勧めします。mysql_real_escape_stringより安全です。

于 2009-03-15T18:44:33.497 に答える
1

Zend_Dbのような抽象化レイヤーを使用して、データベースと対話することをお勧めします。たとえば、Zend_Db_Select をインスタンス化して select ステートメントを作成すると、次のようになります。

//$_GET['thing'] is automatically escaped 
$select = $zdb->select()->from('things')->where('name = ?',$_GET['thing']);
$result = $zdb->fetchRow($select->__toString());//__toString generates a really pretty, vendor independent query

//a plain vanilla query would look like this:
$result = $zdb->fetchRow('select * from things where name = ?', $zdb->quote($_GET['thing']);
于 2009-03-15T19:43:58.767 に答える
1

この PHP の「機能」は「マジック クォート」として知られています。それらは「魔法」かもしれませんが、誤った安心感を与える以上のことをしないため、それらを使用することは非常に悪い習慣です. ありがたいことに、それらは PHP 6 (開発中) から削除されました。

批判のより詳細なリストは、このウィキペディアの記事にあります。

PHP のマニュアルには、マジック クォートを無効にするさまざまな方法が説明されています。

于 2009-03-15T18:52:16.740 に答える
0

魔法の引用符がオンになっています。PHP グループは、この関数を公式に非推奨とし、これに依存することを強く推奨していません。.htaccess実行時に魔法の引用符を無効にする方法は、使用する天気やini_set()スクリプトで常に機能するとは限りません。常にストリップスラッシュを呼び出すことも、かなり面倒になる可能性があります。

詳細: http://ca3.php.net/magic_quotes

于 2009-03-17T14:39:29.140 に答える