2

それで、前の質問でPDOプリペアドステートメントを使用するようにアドバイスされた後、私はしばらくの間疑問に思っていましたが、データベースに接続してそのようなインスタンスでそれらを使用することがなぜ重要なのでしょうか?

例:$_SERVER['REMOTE_ADDR']

つまり、私がデータベースを使用していることを誰も知らず、彼らが私が何を探しているのかわからず、データベースで私が探しているのは(彼らが知っていると仮定して)IPアドレスである場合、なぜそれが必要なのですか?案件?これはXSS攻撃の問題ですか?

本物の質問。この場合、PDOステートメント(または同様のメソッド)を使用する理由を見つけることができませんでした。確かに私は無防備ではありませんか?

4

5 に答える 5

6

だからあなたはあなたの入力をまったく消毒していませんか?本当に?

「BobO'Reilly」という名前のユーザーがいるとどうなりますか?あなたのコードはそれに対処しますか?試しましたか?

または、誰かが数値フィールドに文字を入力するとどうなりますか。あなたのコードはそれに対処しますか?

SQLデータのサニテーションは、ハッキングから保護するだけではありません。引用符やクエリを壊す他の文字が含まれているかどうかを気にせずに、日常のデータを入力できます。

ハッキングから保護することは非常に良いことですが、それが考慮されていなかったとしても、DB入力をサニタイズする必要があります。

...私がデータベースを使用していることを誰も知らない場合...

ハッカーは「知りません」と彼らは推測します。彼らは、いくつかの一般的なハッキング手法を試して、何が起こるかを確認します。サイトが希望どおりに応答する場合、サイトが脆弱であることを知っています。それは彼らが本当にあなたを攻撃し始める時です。

これらの調査ハックは通常自動化されており、攻撃するサイトを探してWebをトロールするだけです。オンラインになっているだけで脆弱になります。あなたが曖昧であるという理由だけで、または誰もあなたのコードを知らないという理由で、あるいは誰もあなたをハッキングしたくないという理由で、あなたが安全だとは思わないでください。彼らはあなたを見つけ、あなたをハックします。

于 2013-01-17T16:18:05.693 に答える
2

GETまたはPOSTリクエスト、あるいはCookieから値を取得し、その値を使用してクエリする文字列を作成すると、悪意のあるユーザーが受信したデータを適切に設定して、元のクエリを次のように変換できた可能性があります。別のもの(異なるSQLステートマンを使用)を使用して、データを制御します。

ここでは全体として、 SQLインジェクション用のGoogleについては説明しません。

「準備されたステートメント」を使用する場合、渡されたデータを使用してクエリのステートマンを変更することは事実上不可能です。

編集

例:$ _SERVER['REMOTE_ADDR']の使用

唯一の値がその値である場合、あなたは非常に安全です。しかし、誰が知っていますか...

おそらく、将来発見されるPHPのバグにより、クライアントがクエリを微調整する方法でその値を変更できるようになるでしょう...

疑わしい場合は、プリペアドステートメントのパターンに固執してください。これはあなたにいくらかかりますか?

于 2013-01-17T16:07:21.737 に答える
1

厳密に必要ではない場合でもプリペアドステートメントを使用すると、デフォルトで安全なコードを生成するという考え方が得られ、入力は安全であると思われるが実際には安全ではない(たとえば、$_SERVER['HTTP_HOST']安全に見えるが必ずしもそうではない)状況を回避できます。 。はい、特定の変数$_SERVER['REMOTE_ADDR'] 安全である必要がありますが、特に注意しても何も失われません。

于 2013-01-17T16:17:59.390 に答える
0

SQLステートメントでphp変数を使用しましたか?どこ/注文/制限条項のために?はいの場合、エスケープ変数でPDOステートメントを使用します。

将来、SQLServer、SQLiteに移行する場合は、PDOを使用してドライバーコネクタ(1コード行)を変更する必要があります。mysql / mysqliでは、すべてのphpコードを変更する必要があります。

于 2013-01-17T16:06:32.807 に答える
0

PDOは、攻撃者によって提供された任意のSQL(SQLインジェクション)の実行を停止するのに役立ちます。

攻撃者がサーバー上で好きなSQLを実行できる場合、データベースからデータを取得/編集できます。さらに、一部のDBMSでは、セキュリティ対策に応じて、Webルート内のファイルにアクセス/作成できます。

于 2013-01-17T16:06:53.510 に答える