質問

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

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

mysql_real_escape_stringを使用する前に、Webサービスで名前を確認できると思っていましたが、これにはセキュリティの欠陥がありますか?または、SOAP Webサービスはすでにクリーンな入力のために独自のチェックを行っていますか?

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

役に立ちましたか?

解決

なぜなら、いくつかのコードを表示する必要があります mysql_real_escape_string アポストロフィを除去するのではなく、脱出するだけです。
脱出手段 O'Hare となります O\'Hare 文字列として挿入できるように: 'O\'Hare'. 。データベースから取得すると、あなたの値はまだ元のものでなければなりません O'Hare.

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

もう1つのオプションは、MySQLライブラリの使用からMySQLIまたはPDOライブラリに切り替えて、データベースにアクセスすることです。後者の2つのサポートは作成された声明をサポートしました。準備されたステートメントは、一般に、データベースを照会するためのベストプラクティスであると考えられています。

他のヒント

mysql_real_escape_string() アポストロフィを除去しません。

あなたの問題は、出力側、または入力を台無しにする他の関数にある可能性があります。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top