ApostropheがPHP MySQLを除去するのを防ぐ方法
-
28-09-2019 - |
質問
ユーザー名を要求する登録システムがあります。一部の人々は姓にアポストロフィを持っており、データが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
または、誤動作します。