0

ユーザー名を要求する登録システムがあります。一部の人々は、姓にアポストロフィがあり、データが MySQL データベース テーブルに書き込まれません (O'Hare など)。

文字列からアポストロフィを削除する mysql_real_escape_string を使用しています。Web サービスに対してアポストロフィを付けた値を使用する必要がある場合を除いて、これで問題ありません。そうしないと、Web サービスは false を返します。

mysql_real_escape_string を使用する前に、Web サービスで名前チェックを行うことができると考えていましたが、これはセキュリティ上の問題を引き起こす可能性がありますか? それとも、SOAP Web サービスは、クリーンな入力に対して独自のチェックを既に行っているのでしょうか?

または、PHP がアポストロフィを保持しながらも安全に保ち、MySQL がそれを受け入れることができるように、変数を渡すより良い方法はありますか?

4

3 に答える 3

7

mysql_real_escape_stringアポストロフィは削除されず、エスケープするだけなので、コードを表示する必要があります。
エスケープ手段は、文字列として挿入できるようになりO'Hareます。データベースから取得しても、値は元の値のままである必要があります。O\'Hare'O\'Hare'O'Hare

したがって、アポストロフィが「失われた」場合は、プログラムロジックのどこかにエラーがある可能性があります。

もう1つのオプションは、データベースにアクセスするためにMySQLライブラリの使用からMySQLiまたはPDOライブラリの使用に切り替えることです。後者の2つは、プリペアドステートメントをサポートします。プリペアドステートメントは、通常、データベースをクエリするためのベストプラクティスであると考えられています。

于 2010-11-25T10:23:16.840 に答える
0

mysql_real_escape_string()アポストロフィは削除されません。

問題は、出力側、または入力を混乱させる他の関数にある可能性があります。

于 2010-11-25T10:23:47.713 に答える
0

使用する前にデータベース接続を開く必要がありますmysql_real_escape_string。そうしないと、誤動作します。

于 2011-10-01T16:16:41.373 に答える