2009-03-30 5 views
3

これはよく知られた真実です。ユーザーの入力を信頼することはできません。これらの入力は、フィルタリングされていない状態で使用される場合、セキュリティ上の問題でさえあります。 XSSとSQLインジェクションは、フィルタリングされていないユーザ入力(またはユーザによって変更可能な入力)を使用することから生じる可能性のある問題です。String以外の他のデータ型は、外部ソースから取得した場合、潜在的に有害な可能性がありますか?

このような問題を回避するには、外部リソースの影響を受けるすべての文字列を制御する必要があります。 Perlはこれを「Taint-mode」でサポートしています。

私が知っている問題はすべて、操作されたストリングから発生しています。あなたは、ints、浮動小数点などの外部からの影響によって操作されるセキュリティの問題の例を知っていますか?または、このデータ型は安全であると想定できますか?

答えて

4

最終的に変換するかどうかにかかわらず、最終的にすべての値が文字列としてプログラムに渡されます。このような理由だけでなく、すべてが潜在的に有害であるとみなされるべきである。

たとえば、数値フィールドに数値以外の文字を入力すると、解析エラーが発生する可能性があります。あなたが期待していない場所にゼロを置くと、ゼロで除算することができます。あなたが期待されるよりもはるかに大きな値を入れたり、期待していないときに負の値をつけたり、その他いくつかのものを置くと、何らかのエラーが出る可能性があります。そして、システムエラーがあなたが望むよりも多くの情報を漏らす可能性が非常に高いです。たとえば、ASP.NETアプリケーションでカスタムエラーがオンになっていない場合、データベース接続情報、物理パス情報、またはサイトが使用する3番目の部分ライブラリに関する情報がデフォルトのエラーメッセージで漏洩する可能性があります。

文字列はおそらく他の値よりも問題になる可能性がありますが、すべてのユーザー入力は潜在的に有害なものとして扱われるべきです。

1

いいえ、外部ソースから番号を受け入れることによってセキュリティ上の問題が発生する可能性があります。外部ソースが処理する必要のある配列(例えば、配列)の要素をいくつか与えている場合、盲目的に信頼できる多数の人が、スローダウンやメモリの枯渇を引き起こすのに十分なメモリを割り当てることによってサービス拒否を引き起こす可能性があります。逆に、値が小さすぎるとストレージを割り当てたよりも多くの要素を読み続けると、スタックやヒープの上書きが発生する可能性があります。

1

安全であるかどうかは、データ型ではなく、これを決定するコードです。つまり、文字列は、バッファオーバーランや基本的なインタプリタ(SQLやスクリプト言語)に対するインジェクションスタイルの攻撃のために一般的に問題を引き起こします。明らかに数値型変数からは、この種の問題はありません。

は、悪意のある外部値に関するバグで、サービス拒否攻撃などに役立ちます。

1

trust boundaryを横切るデータは絶対信用しないでください。 1つの 成分が境界の他方の側のコンポーネント を信頼していない場合

信頼境界が生じます。 異なる 特権レベルで実行されている要素間には常に信頼境界がありますが、同じ 特権レベルで実行されている異なる コンポーネント間の信頼境界は になることがあります。

Threat Modeling, once again - ラリー・オスターマン

ラリー・オスターマンのseriesofarticles脅威モデリングに(hereを更新)と彼Threat Modeling Again, Presenting the PlaySound Threat Model postによって実証さによって上の拡大、Microsoft Security Development Lifecycle (SDL)BlogThe New Threat Modeling Processで説明したように、どこでもデータは、信頼境界を越えます起こり得る脅威を特定する必要があります。

関連する問題