質問は、SQLクエリに書き込まれたデータのソースがhttpフォームであるかどうかではありません。現在のリクエストからのものではない。
あなたがのデータを信頼するかどうかは質問です。それは複雑な質問かもしれません。
明らかに、現在のリクエストに由来するものは信頼できません。また、リクエストデータによって変更されるデータベースのサンプルフィールドのように、以前のリクエストに由来する可能性のあるものを信頼しません。しかし、あなたのデータベース内の他のフィールドを信頼することもあれば信頼しないこともあります。たとえば、ITスタッフやDB管理者がいるとします。データベースフィールドに何らかのXSS攻撃やセカンダリSQLi攻撃を挿入して、監査されたテーブルに格納されているユーザーのクレジットカードデータを盗み出すことはないと信じています。彼らが監査されていないテーブルの適切な場所にjavascriptや巧妙なSQLiを注入すると、脆弱なアプリケーションを悪用してクレジットカード情報を盗み、それを元に戻してすべてのトレースを削除する可能性があります。
また、アプリケーションにはデータのソースが異なる場合があります。たとえば、APIにファイル(XMLなど)をアップロードしたり、データを処理したり、UIの一部を処理したり、SQLクエリ。これらのソースを信頼する場合は、SQLiまたはXSSに対する保護を実装しないことを選択できます。しかし、なぜあなたは、簡単なのですか?薄い氷の上を歩くよりも、複数の防御層が常に優れています。
要するに、質問は信頼です。データのソースを絶対に信頼するのであれば(例えば、静的である、ハードコードされているなどの理由で)、問合せで直接使用すると問題ありません。しかし、SQLインジェクションの場合、それを適切に(すなわち、パラメータで)使用するのはとても簡単なことです。
今後の変更についても考慮してください。今は安全だと分かっているので、パラメータなしでSQL文字列に書いています。月が過ぎると、誰かが新しい機能を追加し、クエリを変更し、さらにいくつかのパラメータを追加します.1つは要求からのものです。しかし、パターンはすでに存在しています。パターンをコピーして貼り付けるだけで、アプリケーションは脆弱です。
私の最後のポイントは、あなたのソースコードを見る静的セキュリティスキャナです。パラメータを使用せずにクエリ文字列自体に変数が含まれていると、SQLi用のコードにほとんどフラグが立てられます。もちろん、それは偽陽性であるかもしれませんが、最初にそれらを避けることができるときに、それらの発見を気にしたいと思うことは疑いの余地があります。
時には技術的な悪用可能性だけではなく、他の側面もあります。
クッキーやセッションと関連していますか? Cookieはユーザーが変更できます。セッションはハイジャックされる可能性があります。 –
私が理解しているように、ユーザーは自分のコードを自分のコードに挿入するだけで、どこかの穴を通ってこっそり入ることはできません。あなたのuser_idがクッキーやセッションから取得されている場合は、それをサニタイズする必要があります。自分のデータベースから取得した場合、どのように悪用できるのか分かりません。 –
準備されたステートメントを使用するのは本当の努力ではないので、私はいつもそれを使用します。 – Kitson88