コードの一部でSQLインジェクションが発生しがちな場合、少なくとも誰でもデータベースに書き込むことはできません。万一、全面的な書き込みアクセスを持たないフロントエンドを使用しているのであれば、データベースの読み書きユーザーを分離することは、良いセキュリティ実践ですか?
答えて
はい、私は、ユーザーがサイトを使用するために必要な最低の特権しか許可しないアカウントを使用して接続することをお勧めします。あなたのWebユーザーがデータベースからデータを読み取るだけであれば、私は間違いなく読み取りアクセス権を持つアカウントを作成し、それを介してDBにアクセスさせます。
さらに重要なことは、Webアプリケーションを保護することです。ユーザーがデータベースに書き込まなくても(盗難されたクレジットカード番号やパスワードを考えても)、SQLインジェクション攻撃の犠牲になることがあります。
良い点アクセスもかなり危険です。 – Yasser1984
一般的に、アプローチは実際にはユーザー自身ではなく、異なる役割を持つことです。 SQLインジェクション攻撃に関しては、私が提案しているこのアプローチを通して問題を緩和するのではなく、問題を完全に解決することに集中します。
はい、ただし、データベースインターフェイスと表面積を制御するのに役立つ設計テクニックがたくさんあります。
コードでは、通常、特定のセッション(読み取りと書き込み)でのすべての操作で同じログインが使用されると仮定する必要があります。しかし、ユーザーが書き込みユーザーでない場合、セッションに使用されるログインには書き込み権がないはずです。
SQLインジェクションにさらされる表面積を減らすための良い方法の1つは、そのアカウントが最初に直接テーブルを更新できるようにすることではありません。
たとえば、格納されたprocsを介した書き込みアクセスでは、発生する可能性がある唯一の注入は、適切なパラメータでこれらのプロシージャを実行することです。
したがって、プロシージャは書き込み権限を持つ別のユーザーで実行する必要があり、 "読み取り専用"ユーザーのみが実行可能です。それは良いアイデアです。私はmysqlがそれをサポートしていると確信しています、おそらく残りは同様です。 – Yasser1984
@ user893730プロシージャは、アプリケーションユーザーロールに対して実行されます。一般的に私が見たいのは、最低限の特権を持つアプリケーションユーザの役割です。ビューを選択し、プロシージャを実行します。 http://dev.mysql.com/doc/refman/5.6/en/grant.html EXECUTEをルーチン上に置くことはできますが、その下のオブジェクトに対する権限はありません。 –
ほとんどの場合、これは過剰ですが、ほとんどの場合、SQLインジェクションを受けにくいパラメータ化されたクエリを使用する必要があります。
ストアドプロシージャと、プロシージャを呼び出すことができ、クエリを直接実行しないユーザーアカウントを使用することを検討してください。
直接クエリを使用する必要があり、何らかの理由でパラメータを使用できない場合は、可能であればデータベースからのみ読み取れるユーザーアカウントが必要です。
徹底的な防御、失敗時の計画。パラメータ化されたクエリライブラリに脆弱性が存在します。 – rook
はい。 AbeとCade Rouxの優れた回答に加えて、セキュリティ監査者が攻撃後に優先順位をつけ、法医学をより簡単にするのに役立ちます。
セキュリティ監査をより多くの特権を使用するコードに集中させることができます。読み取り権限が必要なコードよりも書き込み権限が必要なコードを監査するのに時間を費やすことができます。
ロールの分離というもう1つの優れた特性は、フォレンジックスをより簡単にすることです。分離した役割があり、DBログの攻撃を識別できる場合、悪用された可能性のあるコードを絞り込むことができます。ログ内の攻撃に関連付けられた役割を使用するコードのみを絞り込むことができます。
ボビー・テーブルのその愚かな漫画からSQLインジェクションのあなたの考えが来ているようです。
しかし、実際には、データベースからの読書だけが書面よりも悲惨なことがあります。
また、実生活で使っていた「いいやり方だ」と言われたいい人はいないという強い気持ちがあります。言う、フロントエンド(実際には、想像上の人生ではない)も書き込みアクセス権を持っている必要があります。
あなたは間違った木を吠えています。
SQLインジェクションが発生しやすいコードの一部がある場合 - これらのパーツを正しく修正してください。それが唯一の純粋な解決策です。
少し厳しいですが、http://bobby-tables.com/ loolを愛しました – Yasser1984
- 1. GetHashCodeの良い実践ですか?
- 2. グローバルをカプセル化することは良いJavaScriptの実践ですか?
- 3. Java - これは良いプログラミング実践ですか?
- 4. これはAjaxの良いセキュリティ実践ですか?現代のURLのパターニング(パススタイル)で
- 5. ブートストラップグリッドレイアウトの良い実践
- 6. 多型の良い実践
- 7. SQLiteデータベースを構成して読み込み/書き込み可能なデータを分離する
- 8. より良いプログラミング実践
- 9. は、分離ストレージからXMLファイルを読み込むことができ
- 10. 良いMEFチュートリアルと実践ラボ?
- 11. django 0.97で読み込みDBサーバーと書き込みDBサーバーを分離する方法は?
- 12. Azureアプリサービスの分離とセキュリティ
- 13. Websocketベースのアプリ、セキュリティ、リアルタイムの優れた実践ですか?
- 14. JavaScriptの読み込みをユーザーから隠すことはできますか?
- 15. htmlタグのより良い実践
- 16. 良いプログラミング実践:配列の参照
- 17. vDSP fft計算の良い実践
- 18. Androidサービス:活動の良い実践 - サービスコミュニケーション
- 19. PL/SQLの "実践"はどこでできますか
- 20. コアデータを使用して私のメインバンドルのデータベースに読み書きすることはできますか?
- 21. Laravelでの読み取り/書き込みデータベース設定の分割方法は?
- 22. TCLを実践するための良いブラウザベースのサンドボックスはありますか?
- 23. データをディスクに書き込んでそこから読み取る最も良い方法は何ですか?
- 24. ユーザー名が無効です。データベース(ASP.net)からユーザー名を読み取ることができません
- 25. asp.net MVC2の組み込みユーザー部分のデータベースはどこですか?
- 26. Redisクライアント。どのように読み書き操作を分離するのですか?
- 27. 部分ビューで部分ビューを読み込むことはできますか?
- 28. fstream |読み書き操作は良いことも悪いこともしない|大きなファイルへの読み込み
- 29. 別個のWKWebViewを読み込むときにクッキーを分離しますか?
- 30. PhoneGapで内部データベースを読み書きするには?
SQLインジェクションが発生しやすいコードの部分はありません。あなたはいくつか考えている場合は、それらを変更します。読み取り/書き込み権限を制限するだけでは不十分です。 – Ben
これは良い点ですが、この場合、私は古くからのスクリプトを修正する前に、基本的には衛生化など何もしていない古典的なaspウェブサイトに取り組んでいます。これは良いスタートだと思っていました – Yasser1984