php
  • sql
  • security
  • prepared-statement
  • 2016-11-19 5 views 5 likes 
    5

    はご存知でしょうかは、SQLインジェクションから保護するためにパラメータ化されたクエリに役立ちます。私が見たチュートリアルとドキュメンテーションはすべて、フォーム入力を処理するために用意されたSQLクエリを使用しています。しかし、フォーム入力がないときはどうですか?私。 $stmt = "SELECT theme_preference FROM users WHERE user_id = '1234'"; $query = mysqli_query($conn, $stmt);ユーザ入力を処理していないときに準備されていないSQLクエリを使用する可能性がありますか?

    攻撃者がこれを悪用する可能性のある方法はありますか? (私がPHPを使っているとしよう)。

    +0

    クッキーやセッションと関連していますか? Cookieはユーザーが変更できます。セッションはハイジャックされる可能性があります。 –

    +1

    私が理解しているように、ユーザーは自分のコードを自分のコードに挿入するだけで、どこかの穴を通ってこっそり入ることはできません。あなたのuser_idがクッキーやセッションから取得されている場合は、それをサニタイズする必要があります。自分のデータベースから取得した場合、どのように悪用できるのか分かりません。 –

    +1

    準備されたステートメントを使用するのは本当の努力ではないので、私はいつもそれを使用します。 – Kitson88

    答えて

    4

    質問は、SQLクエリに書き込まれたデータのソースがhttpフォームであるかどうかではありません。現在のリクエストからのものではない。

    あなたがのデータを信頼するかどうかは質問です。それは複雑な質問かもしれません。

    明らかに、現在のリクエストに由来するものは信頼できません。また、リクエストデータによって変更されるデータベースのサンプルフィールドのように、以前のリクエストに由来する可能性のあるものを信頼しません。しかし、あなたのデータベース内の他のフィールドを信頼することもあれば信頼しないこともあります。たとえば、ITスタッフやDB管理者がいるとします。データベースフィールドに何らかのXSS攻撃やセカンダリSQLi攻撃を挿入して、監査されたテーブルに格納されているユーザーのクレジットカードデータを盗み出すことはないと信じています。彼らが監査されていないテーブルの適切な場所にjavascriptや巧妙なSQLiを注入すると、脆弱なアプリケーションを悪用してクレジットカード情報を盗み、それを元に戻してすべてのトレースを削除する可能性があります。

    また、アプリケーションにはデータのソースが異なる場合があります。たとえば、APIにファイル(XMLなど)をアップロードしたり、データを処理したり、UIの一部を処理したり、SQLクエリ。これらのソースを信頼する場合は、SQLiまたはXSSに対する保護を実装しないことを選択できます。しかし、なぜあなたは、簡単なのですか?薄い氷の上を歩くよりも、複数の防御層が常に優れています。

    要するに、質問は信頼です。データのソースを絶対に信頼するのであれば(例えば、静的である、ハードコードされているなどの理由で)、問合せで直接使用すると問題ありません。しかし、SQLインジェクションの場合、それを適切に(すなわち、パラメータで)使用するのはとても簡単なことです。

    今後の変更についても考慮してください。今は安全だと分かっているので、パラメータなしでSQL文字列に書いています。月が過ぎると、誰かが新しい機能を追加し、クエリを変更し、さらにいくつかのパラメータを追加します.1つは要求からのものです。しかし、パターンはすでに存在しています。パターンをコピーして貼り付けるだけで、アプリケーションは脆弱です。

    私の最後のポイントは、あなたのソースコードを見る静的セキュリティスキャナです。パラメータを使用せずにクエリ文字列自体に変数が含まれていると、SQLi用のコードにほとんどフラグが立てられます。もちろん、それは偽陽性であるかもしれませんが、最初にそれらを避けることができるときに、それらの発見を気にしたいと思うことは疑いの余地があります。

    時には技術的な悪用可能性だけではなく、他の側面もあります。

    +1

    MySQLより高度なDBMSを使用している場合は、次のことも当てはまります。パラメータ化されたクエリはクエリプランのキャッシュに適していますが、類似のクエリは多くが迷惑メールでクエリプランのキャッシュを埋めるだけです。 –

    関連する問題