0

私は Web プログラミングは初めてで、Web セキュリティに関連する問題を調査しています。

ユーザーが2種類のデータを投稿できるフォームがあります-それらを「安全」と「安全ではない」と呼びましょう(SQLの観点から)。

ほとんどの場所では、「安全でない」部分をサニタイズした後(「安全」にするために)、データの両方の部分をデータベースに保存することをお勧めします。

「安全な」データをデータベースに保存し、「安全でない」データをファイル(データベースの外部)に保存するという別のアプローチについて疑問に思っています。もちろん、このアプローチでは、ファイルと DB エントリ間の関連付けを維持することに関連する独自の問題が生じます。しかし、特にセキュリティに関連して、このアプローチには他に大きな問題はありますか?

更新: 返信ありがとうございます! 私が何を「安全」と考えているかについて明確でないことをお詫びします。私は Django を使用しており、「安全」と見なしているフォーム データは、必要なすべてのエスケープを行うフォームの「cleaned_data」ディクショナリを通じてアクセスされます。

この質問の目的のために、wiki ページを考えてみましょう。wiki ページのタイトルには、スタイルを付ける必要はありません。したがって、ユーザー入力を「安全な」形式に変換するフォームの「cleaned_data」ディクショナリを介してこれにアクセスできます。しかし、ユーザーがコンテンツを任意にスタイルできるようにしたいので、「cleaned_data」ディクショナリを使用してコンテンツ部分にアクセスできない可能性があります。

ファイル アプローチは、この問題のセキュリティ面を解決しますか? または、私が見落としている他のセキュリティの問題はありますか?

4

4 に答える 4

1

あなたが話している「安全な」データを知っていますか? そうではありません。それはすべて危険であり、そのように扱う必要があります。それをファイルに保存するのではなく、SQL ステートメントを適切に構築することによって。

他の人が述べたように、準備されたステートメント、またはそれらをシミュレートするライブラリを使用することが道です。

$db->Execute("insert into foo(x,y,z) values (?,?,?)", array($one, $two, $three));
于 2008-10-09T06:41:47.373 に答える
0

あなたは何を「安全」と「安全でない」と考えますか? 「安全」であるためにスラッシュがエスケープされたデータを検討していますか? もしそうなら、しないでください。

バインドされた変数を SQL プレースホルダーと共に使用します。これは、SQL インジェクションから保護するための唯一の賢明な方法です。

于 2008-10-09T06:24:12.527 に答える
0

データを分割しても、SQL インジェクションから保護されるわけではありません。それによって公開される可能性のあるデータが制限されるだけですが、攻撃のリスクはそれだけではありません。また、データを削除したり、偽のデータを追加したりすることもできます。

特に準備されたステートメントを使用することを考えると(すべてではないにしても、多くの開発プラットフォームとデータベースでサポートされています)、あなたのアプローチを使用する正当性はありません。

あなたのアプローチが終わるという悪夢にさえ入らないこと。

結局のところ、データベースを信頼できないのに、なぜデータベースを使用するのでしょうか? 必要に応じてプレーンファイルを使用してください。ミックスは禁止です。

于 2008-10-09T06:28:08.057 に答える
0

SQLインジェクションはユーザーだけでなくデータベース全体を標的にすることができ、それはクエリの問題(ポイズニングクエリ)であるため、SQLインジェクション攻撃を回避する最善の方法(唯一ではないにしても)は、クエリを制御し、注入される可能性から保護することですストレージを分割するのではなく、悪意のある文字。

于 2008-10-09T06:36:28.663 に答える