ホームページ >バックエンド開発 >PHPチュートリアル >mysql_real_escape_string() 関数は、PHP のバージョンによって処理方法が異なります。
mysql_real_escape_string() は PHP のバージョンによって動作が異なることがわかりました。オンラインでセキュリティ開発ドキュメントを読んだところ、mysql_real_escape_string() を正しく使用する前に、mysql 接続文字セットを指定する必要がある、つまり、文字セットが指定されていない場合は mysql_set_charset() 関数を使用する必要があると記載されていました。 GBK と同様のワイド文字が使用されていると、ワイド文字インジェクションが発生する可能性があります。
ここでは、mysql_real_escape_string() のみを使用し、現在の接続文字セットを指定するために mysql_set_charset() 関数を使用しませんでした。 PHP のバージョンは 5.3.29 です。ワイド文字のインジェクションが失敗したときに、mysql ログを確認すると、ワイド文字もエスケープされていることがわかります。
コード:
リーリーphpバージョン5.2.17使用時のmysqlログ:
リーリーphpバージョン5.3.29使用時のmysqlログ:
リーリーここでの質問は、PHP バージョンが 5.3.29 の場合、mysql_set_charset() を使用して接続文字セットを指定する必要はありませんか?不要かどうかの判断方法! ! ! !
mysql_real_escape_string() は PHP のバージョンによって動作が異なることがわかりました。オンラインでセキュリティ開発ドキュメントを読んだところ、mysql_real_escape_string() を正しく使用する前に、mysql 接続文字セットを指定する必要がある、つまり、文字セットが指定されていない場合は mysql_set_charset() 関数を使用する必要があると記載されていました。 GBK と同様のワイド文字が使用されていると、ワイド文字インジェクションが発生する可能性があります。
ここでは、mysql_real_escape_string() のみを使用し、現在の接続文字セットを指定するために mysql_set_charset() 関数を使用しませんでした。 PHP のバージョンは 5.3.29 です。ワイド文字のインジェクションが失敗したときに、mysql ログを確認すると、ワイド文字もエスケープされていることがわかります。
コード:
リーリーphpバージョン5.2.17使用時のmysqlログ:
リーリーphpバージョン5.3.29使用時のmysqlログ:
リーリーここでの質問は、PHP バージョンが 5.3.29 の場合、接続文字セットを指定するために mysql_set_charset() を使用する必要はありませんか?不要かどうかの判断方法! ! ! !
これは PHP のバージョンとは関係ありません。mysql および mysqli 拡張機能は C 言語を使用して直接開発されており、mysql のサードパーティ ライブラリも C API を通じて提供されます。
つまり、これは mysql.dll のバージョン (mysql lib のバージョン) に関連しているはずです。
mysql の拡張バージョンは、mysql_get_client_info()
関数を使用して取得できます。
あなたの質問については、MySQL 開発者マニュアルを参照してください: 23.8.7.53 mysql_real_escape_string()