0

mysql_real_escape_stringを入れた変数から常に\(バックスラッシュ)を取得しました。例えば ​​:

$string = mysql_real_escape_string($_GET['string']);
echo $string; //result : here\'s the text

そして、私がグーグルでいくつかの調査をした後、何人かの人々は、magic_quotes_gpcがオンになっているサーバー設定によって引き起こされたこのバックスラッシュを言います。私もこの構成を持っています。私はそれを私に見ますphpinfo(), magic_quotes_gpc = ON

私の質問は...このmagic_quotes_gpcをオフにするのは本当に安全ですか?
mysqlインジェクションを防ぐためにmysql_real_escape_stringを使用しているためです。magic_quotes_gpcをオフにすると、サーバーのパフォーマンスが低下するのではないかと心配しています。

4

3 に答える 3

2

あなたはこれらの主題についてかなり基本的な授業料を持っている必要があるように私には聞こえます。あなたは明らかにインターネットで読んでいて、例をたどっていますが、例がなぜ彼らがしていることをしているのか、または彼らがどのように機能するのかを実際に理解していません。例を理解せずにコピーするのは良いことではありません。

したがって、コアでは、トピックをより深く理解する必要があります。これは、おそらくこのようなサイトでは提供するには多すぎます(SOは、主題全体を教えることよりも、特定の問題を解決するのを支援することですが、サイト)。

しかし、私はあなたのポイントのいくつかに対処します:

  • Magic Quotesは、廃止されたPHP機能です。実際、PHPの最新バージョンから完全に削除されています。これを無効にしても、サーバーの「パワフルさ」などは低下しません。実際には、使用しないことをお勧めします。

  • で始まるすべての機能mysql_も非推奨になり、推奨されなくなりました。新しい選択肢は、mysqli_xxx()関数またはPDOライブラリです。古い関数を使用してチュートリアルをフォローしている場合は、新しいチュートリアルを見つける必要があります。

  • このmysql_real_escape_string()関数(およびmysqli / PDOに相当するもの)は、SQLステートメントを無効にする引用符またはその他の文字を見つける文字列にスラッシュを追加することを目的としています。この関数を実行した後に文字列でスラッシュを見つけることは、完全に正常で正しいことです。これは、文字列の「エスケープ」と呼ばれます(したがって、関数の名前です)。文字列の「エスケープされた」バージョンは、SQLクエリを作成するコンテキストでのみ使用する必要があります。

于 2013-01-15T13:24:55.637 に答える
1

コードが特定の文字列を適切にエスケープするように処理している限り(呼び出しmysql_real_escape_string()など)、php.iniでこの機能を無効にすることができます。実際、特定の仮想ホスト用にパラメータを設定するために調整php.iniまたは使用することにより、実行環境が必要なパラメータに設定されていることを常に確認する必要があります。.htaccess

magic_...一度オフにすると基本的に問題が発生するため、これらすべてに依存することは最初から壊れています。ハッキングされない限り、通常は気付かれません。

于 2013-01-15T12:39:41.863 に答える
0

あなたが期待mysql_real_escape_stringしていることは何ですか?

文字列をエスケープしているのでhere\'s the text、期待される出力もエスケープしています。これは、すでに文字列をエスケープしている魔法の引用符とは関係がなく、 。here\\'s the textを呼び出した後の結果として表示されますmysql_real_escape_string


もちろん、コメントですでに述べたように、MySQL_*PHP内のメソッドのファミリーは非推奨になっているため、使用しないでください。プリペアドステートメントと一緒に、MySQLiまたは代わりに使用することを検討してください。PDO

于 2013-01-15T12:39:34.850 に答える