私のSQLクエリでは、ユーザーが入力したフォームからデータを送信しています。hereのように、PDOで列名をパラメータ化することはできません。クエリの列名がフォームのフィールド名に基づいて動的に挿入されるため、これは重要です。
$ _POST配列で提出された列名をデータベースから引き出し、一致しないものを取り除くだけで、簡単に検証できます。 SQLインジェクションを避けるためにこれを行うのは良いことですか、システムリソースの浪費ですか(データベースに依存するリクエストの実行を効果的に倍増させるため)SQLクエリを送信するときに列名を検証する必要はありますか?
答えて
これは
号
または単にシステムリソース
号
の無駄であるSQLインジェクションを防ぐために行うには良いことですsysからシンプルに選択するだけで無駄になることはありません温度表。
しかし、ユーザーが一部のフィールドを許可されていない場合でも、何らかの注入が可能です。たとえば、サイト管理者によって(仮想の)フィールド「user_role」が入力されていて、POSTでそのフィールドを定義できる可能性がある場合、ユーザーはアクセス権を変更できます。
したがって、フィールドのハードコード(ホワイトリスト)は唯一信頼できる方法です。
それが効果的にデータベース
男に依存しているすべての要求の実行を倍増として。照会されるデータベース。唯一の目的です。単純な選択クエリを維持できないデータベースはナンセンスです。クエリは異なります。 1つの挿入は、10選択よりも重いです。数量ではなく、品質でクエリを区別する必要があります。
クエリの列名は、フォームのフィールド名に基づいて動的に挿入されます。
ただし、挿入/更新クエリでは非常に正しいですが、SELECTオブジェクトでは、悪いデザインの大きなサインです。私はWHERE/ORDER BY句に変数のフィールド名を立てることができますが、テーブル名句のフィールドセットを書き留める必要がある場合は、データベースの設計が間違っています。
列名をハードコードして高速化することができます。また、テーブルスキーマが変更されるたびにコードを更新する必要がないように、プルされたテーブルの説明をキャッシュすることもできます。脇から
ハードコーディング列のリストは、次のように続いて
QuerableSources
SrcTable SrcColumn DescriptToUser
SomeTable SomeColumn Column used for
AnotherTable AnotherColumn Something Else
etc.
として、あなたが構築し、あなたがから列クエリを許可するデータベース内の別のテーブルを経由して列のリストを構築することができユーザーが読みやすくするために "DescriptionToUser"コンテンツを選択するためのコンボボックスの例です。有効な列とテーブルのソースを制御します。
彼らが探している値は、SQLインジェクションを防ぐためにスクラブしてください。
- 1. 入力検証とDBクエリを分離する必要がありますか?
- 2. は、HTTPS URLに証明書を送信する必要があります
- 3. .net cookie、ブラウザに送信する必要はありますか?
- 4. javacriptでファイル名と拡張子を検証する必要があります
- 5. コンストラクタのパラメータを検証する必要がありますか?
- 6. 検証後にモーダルを検証する必要があります。
- 7. クエリを送信するときにエスケープする必要があるのは何ですか?
- 8. OAuth2では、モバイルクライアントから認証コードまたはトークンをサービスに送信する必要がありますか?
- 9. ESMEは配信レポートを送信する必要がありますか?
- 10. オペランドは、私のSQLクエリに1列を含める必要があります
- 11. フォームを送信する必要はありません(流星)
- 12. Cache-Controlは、すべての要求を検証する必要があるか、古いものだけを検証する必要がありますか?
- 13. php sqlクエリはnullである必要があります
- 14. BizTalk SSOチケットエラー "チケットの検証に失敗しました。送信者名はチケット発行者の名前と一致する必要があります。"
- 15. SQL Serverストアドプロシージャから列名を取得する必要があります
- 16. フォームを送信するときに__toString()が文字列値を返す必要があります
- 17. 送信する必要があります複数の列とシートの通知
- 18. jQuery - カレンダーオプションをクリックするとフォームを送信する必要があります
- 19. AutoItでSQLクエリを実行する必要があります
- 20. SQLクエリのパフォーマンスを改善する必要があります
- 21. SQLでクエリを記述する必要があります
- 22. このフォームを検証する必要があります
- 23. htmlスタイルを検証する必要があります
- 24. 値のテキストボックスを検証する必要があります
- 25. データをチャンクで送信するか、一度に送信する必要がありますか?
- 26. JQueryの検証とフォーム提出 - 送信ボタンを2回押す必要があります
- 27. メッセージを送信するときに、なぜ:を追加する必要がありますか?
- 28. 電子メールを送信するときに文字をエスケープする必要がありますか?
- 29. テストケースまたは検証方法にアサートする必要がありますか?
- 30. はonSubmit検証せずにフォームを送信する必要があり、ここでアクション
おそらく私のSELECTクエリは動的なフィールド名を使用していません。あなたが言ったように、それはばかげているでしょう。 – hamalnamal