ホームページ >バックエンド開発 >PHPチュートリアル >mysql_real_escape_string() 関数は、PHP のバージョンによって処理方法が異なります。

mysql_real_escape_string() 関数は、PHP のバージョンによって処理方法が異なります。

WBOY
WBOYオリジナル
2016-07-06 13:53:131337ブラウズ

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()

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。