私は入力を1つずつエスケープすることが多く、2つの方法の違いについては不思議です。どちらがより一般的なプラクティスですか?私は最初に "エスケープが必要な"フィールドをエスケープしてみました。そして、それぞれの値に対して長いエスケープコードを書くことになりました。一度にSQL文全体をエスケープするときの短所は何ですか?入力パラメータを1つずつエスケープするか、SQLクエリ全体をエスケープする必要がありますか?
答えて
クエリ内で値を示すためにシングルクォートなどのものを使用しているため、エスケープしないようにしていますが、一重引用符を含む可能性のある値をエスケープしたいからです。
mysqlがエスケープされたSQL文字列を受け入れていないことは確かですか? –
これは "受け入れ"の問題ではありません - MySQL構文(つまり文字列を区切る)のコンテキストで必要なアポストロフィをエスケープすると、クエリが完全に変更され、おそらくそれが破られる可能性があります。 – andrewtweber
@UğurGümüşhanそれは、単一の引用符が値の開始と停止を示す制御文字であるため、値を含む文全体をエスケープしたくない、エスケープされたSQL文字列を受け入れないということではありません。 – jakx
mysql_real_escape_stringを使用すると、SQL文字列をエスケープしたほうが便利です。時間と記憶に関連して。必要に応じて、各入力レベルでいくつかのバリデーションを行うことができます。
これは絶対に意味をなさない唯一の答えではありません。他人を助けようとする前に少しだけ学ぶ必要があるかもしれませんか? –
確かに、私は助けて学びます。私はあなたがどこにいるのを得ようとしています – tmjam
準備文を使用し、バインドパラメータを使用します。何か他のことが起こるのを待っているハックです
そうではありません。プリペアドステートメントとバインドパラメータをある種の魔法の詠唱として使用し、それを理解することなく、ハックを待っています。しかし、エスケープはセンスで使用するとまだ解読できません。 –
@Shrapnelあなたはそれを詳しく説明できますか?教育目的のため。 – Repox
すべてのデータを文字列として扱うことができるので、エスケープして引用することができる限り、「ハック待ち」はありません。 "それ以外のものは"準備されたステートメントよりも十分に良いです。一方、一度識別子を挿入しなければ、エスケープ| quotingもプリペアドステートメントもあなたを助けません。 –
各入力を1つずつエスケープします。これを全SQL問合せに対して行う場合は、エスケープ後もSQL文が有効であることを確認することはできません。あなたが
("a", "a")
代わりの
("aaa")
を受け取ることになります生成されたSQLで、私はエスケープだと思うのは、代わりに
aaa
ユーザーが
a", "a
を入力しますと言ってみましょう全体のSQL文は機能しませんそのような状況では
各varをエスケープする長いコードが心配ですが、何らかの理由で関数の目的を忘れてしまいました。
function escape_me($value) {
$value = strip_tags($value);
$value = mysql_real_escape_string($value);
.........
}
$var1 = escape_me($_POST['var1']);
うまくいけば、あなたは正しい方向を指していることを望みます。
私はescape_me関数を持っています。とにかくありがとう。 –
@Uğurは重大な間違いのような機能を持っています。 –
@ Col.Shrapnel入力をエスケープするのが悪いのはなぜですか?これは単なる例です。 – frustratedtech
少し多少のものがありますが、私はそれがとても重要だと感じています。
これは、問題に関する最初の質問ではありません。そして、あなたはまだポイントを取得していないようです。
あなたは本当にmysqlがエスケープされたSQL文字列を受け入れないのですか?
私は恩をお願いしますが、この質問はあなたの主な問題です。
説明を探すのではなく、理解を求める代わりに、何らかの肯定的な答えを求めているだけです。
この質問の結果は、問題の理解に基づいてあなた自身に与えた答えである必要があります。
この場合に限り、それはあなたに良いことをします。
それ以外の場合は、すぐ次のステップに遭遇します。
エスケープ文字列の意味を理解してください。
あなたの質問は、非常に基本的なSQLの知識を持っている人にとっては絶対に意味がありません。
もちろん、このようなクエリ全体のエスケープはうまくいかないでしょう。 SQLクエリの性質のためです。
この性質を理解するためには、が必然的に必要です。 いくつかの本を読んでください。 保証のためではなく、説明を求めてください。
- 1. SQLクエリをエスケープする必要がある場合
- 2. Sql ServerのLIKEクエリでエスケープする必要がある文字
- 3. PDO:文字列をエスケープする必要がありますか?
- 4. クロスサイトスクリプティング(XSS):アンパサンドをエスケープする必要がありますか?
- 5. Elasticsearchクエリで予約文字をエスケープする必要がありますか?
- 6. PHP fopen($ file)$ファイルはエスケープする必要がありますか?
- 7. データのサニタイズPHP - if文の中にあるユーザ入力をエスケープする必要がありますか?
- 8. 結果セットを1つずつ返すためにクエリをループに入れる必要があります
- 9. mediawiki mathjaxエスケープを使用する必要があります。$ x $
- 10. AWSの "Fn :: Base64:!Sub"で何かをエスケープする必要がありますか?
- 11. text/plainまたはtext/javascriptからエスケープする必要がありますか?
- 12. "||"をエスケープする必要があります文字列からの条件
- 13. 設定ファイルでバックスラッシュをエスケープする必要がありますか?
- 14. 正規表現でピリオドをエスケープする必要がありますか?
- 15. sequelize(node.js)でエスケープ文字列を使用する必要がありますか?
- 16. なぜJavaソースファイルでUnicodeをエスケープする必要がありますか?
- 17. matches()でjava正規表現をエスケープする必要がありますか?
- 18. Facebookのデータをエスケープしてサニタイズする必要がありますか?
- 19. 正規表現 - ハイフンをエスケープする必要がありますか?
- 20. メールの件名をHTMLでエスケープする必要がありますか?
- 21. EmberJS:テンプレート全体をエスケープする
- 22. nodejs:各引数をエスケープする代わりにSQL文字列全体をエスケープする方法は?
- 23. いつ正規表現の文字セット([]内)内の文字をエスケープする必要がありますか?
- 24. パーセント記号(%)は常にHTMLでエスケープする必要がありますか?
- 25. ハイフンは正規表現でエスケープする必要がありますか?
- 26. 3つのSQLリクエストを1つにまとめる必要があります
- 27. 2つのテキストフィールド、どちらか一方のみを入力する必要があります(いずれか)
- 28. ユーザー入力のSQLエスケープ
- 29. tinyxml誰かがエスケープする必要がある文字について説明できますか?
- 30. 私はPHPMailerのAddAddress関数のパラメータをエスケープする必要がありますか?
SQL文全体を一度にエスケープすることはできません。それは、価値的にしか機能しません(そしてその値は文字列でなければなりません)。ただし、エスケープ処理は、古いデータベースインタフェース関数を使用しないことで回避できます。 (検索を使用して、PDOとバインドされたパラメータを探してください) – mario
[MySQL/PDO/Prepared Statements]の可能な複製 - すべての大きなジャンプ、ちょっと圧倒し、ちょっと混乱しますか?](http://stackoverflow.com/questions/ 8061185/mysql-pdo-prepared-statements-all-a-big-jump-a-bit-overwhelming-and-a-lit) – mario