1

私は、長年の Java 経験を持つ新米の Ruby/Rails 開発者です。この「セキュリティ」の質問は、Rails ではなく Ruby に固有のものです。そのため、ほとんどの Rails のセキュリティに関する質問は Web に関するものであるため、答えを見つけるのが困難でした。

Java 開発者として、Effective Java を何度か読みました。その本の重要なポイントの 1 つは、クラス内のデータとメソッドを悪意のあるユーザーから保護することです。つまり、コードをできるだけ非公開にし、不変クラスを使用し、不変オブジェクトへの参照を返すときに防御コピーを使用します。final キーワードも使用できます。

しかし、Ruby ではすべてがオープンです。確かにメソッド/データを非公開にすることはできますが、Ruby API の消費者として、メソッドの独自のバージョンを作成し、単純に (実行時またはコードで動的に) クラスにアタッチすることを妨げるものはありますか? API? 効果的な Java で説明されているすべてのセキュリティは、Ruby にはまったく適用されないようです。これは Java からの単なる考え方の変化ですか? これは、Ruby や他の類似言語の「欠陥」ではありませんか?

4

2 に答える 2

3

防御は、侵入者ではなく、悪い設計に対するものです

カプセル化、クラスプライベート機能、およびその他の推奨されるOOデザインパターンは、悪意のある外部機能や敵のクラスを再び防御するためのものではありません。

むしろ、アイデアは、プログラムを壊れにくく、変更しやすいように構成することです。

各クラスを別々の建物と考えてください。北にある次の建物に寄りかかるように新しいオフィスを建設し、おそらく建物から西に鋼を伸ばして、新しい構造を維持するのに役立てることができます。

明らかな結果は、NとWの隣人の構造的完全性への損傷、および新しい建設に対する疑わしいサポートになるでしょう。ソフトウェアでは、このような悪い考えは必ずしも明白ではないので、私たちは私たちに思い出させるために原則と推奨事項でいっぱいの本を読みます。

于 2011-09-28T16:26:03.397 に答える
2

これが攻撃のベクトルになるためには、悪意のあるユーザーが実行するコードを変更できる必要があります。彼がそれを行うことができれば、あなたがどの言語を使用しているかは関係ありません。あなたは彼のコードを実行していて、彼はあなたを所有しています。

于 2011-09-28T16:17:24.200 に答える