問題タブ [defensive-programming]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
security - 防御的プログラミング
コードを書くとき、高いプログラム品質を確保し、バッファ オーバーフロー エクスプロイトやコード インジェクションなどによってコードが悪用される可能性を回避するために、意識的に防御的にプログラムしますか?
コードに常に適用する「最低」レベルの品質は?
c++ - テスト ケース VS ASSERTION ステートメント
私のほとんどの C++ プロジェクトでは、次のように ASSERTION ステートメントを多用しました。
しかし、TDD コミュニティは次のようなことを楽しんでいるようです。
私の経験では、最初のアプローチで非常に多くの微妙なバグを取り除くことができました。しかし、TDD アプローチは、レガシー コードを処理するための非常に賢明なアイデアです。
「Google」 - 彼らは「FIRST METHOD」を「救命胴衣を着て海岸を歩き、安全ガードなしで海を泳ぐ」と比較します。
どちらの方がよいですか?ソフトウェアを堅牢にするのはどれですか?
security - Web サイト プログラミングの脆弱性のチェックリスト
SOがオンラインになるのを見るのは、私にとってかなりの教育でした. Web サイトに対して使用されるさまざまな脆弱性とエクスプロイトのチェックリストを作成したいと思います。また、それらを防御するために使用できるプログラミング手法は何ですか。
- 脆弱性のどのカテゴリ?
- 墜落現場
- サーバーに侵入する
- 他人のログインに侵入する
- スパム
- ソックパペッティング、ミートパペッティング
- 等...
- 防御的プログラミング手法にはどのようなものがありますか?
- 等...
ruby - Rubyで防御的にプログラミングするにはどうすればよいですか?
問題の完璧な例を次に示します:分類子の gem が Rails を壊します。
** 元の質問: **
セキュリティの専門家として気になる点の 1 つは、Ruby には Java のパッケージ プライバシーに匹敵するものがないことです。つまり、これは有効な Ruby ではありません。
Foo::BarImpl のモンキー パッチを防ぐことができれば非常に便利です。そうすれば、ライブラリに依存している人々は、誰もそれをいじっていないことを知ることができます。誰かがあなたの MD5 または SHA1 の実装を変更したと想像してみてください! これらのクラスを呼び出すことはできますfreeze
が、クラスごとに行う必要があり、読み込み順序に十分注意しないと、アプリケーションの保護が完了する前に他のスクリプトによってそれらが変更される可能性があります。
Java は防御的プログラミングのための他の多くのツールを提供しますが、その多くは Ruby では不可能です。(適切なリストについては、Josh Bloch の本を参照してください。) これは本当に懸念事項ですか? 文句を言うのをやめて、Ruby を軽量のものに使用し、「エンタープライズ対応」のソリューションを期待しないでよいのでしょうか?
(いいえ、Ruby ではコア クラスはデフォルトで凍結されていません。以下を参照してください:)
defensive-programming - テストケースとアサーションステートメント
この質問のコードは私に考えさせました
私はifステートメントを決して書きません。主張するだけで十分です/あなたができるすべて。「早くクラッシュし、頻繁にクラッシュする」
CodeCompleteの状態:
- assert-statementは、アプリケーションを正しくします
- if-testはアプリケーションを堅牢にします
無効な入力値を修正したり、コードをスキップしたりして、アプリケーションをより堅牢にしたとは思いません。
これらの修正は、外界について行った仮定に基づいています。呼び出し元だけがあなたの関数の「有効な入力値」が何であるかを知っており、彼はあなたの関数を呼び出す前にその有効性をチェックしなければなりません。
CodeCompleteを言い換えると、「アサーションだけに依存しないと、実際のプログラムは乱雑になりすぎます。」
質問:私は間違っていますか、頑固で、愚かで、防御的すぎます...
language-agnostic - いつDebug.Assert()を使用する必要がありますか?
私は、CSの学位を取得して卒業し、約1年間プロのソフトウェアエンジニアを務めています。私はC++とCでアサーションについてしばらく知っていましたが、最近までC#と.NETにアサーションが存在することをまったく知りませんでした。
私たちの製品コードにはアサートがまったく含まれていません。私の質問はこれです...
プロダクションコードでAssertsの使用を開始する必要がありますか?もしそうなら、その使用はいつ最も適切ですか?するほうが理にかなっていますか
また
desktop-application - ユーザーが実行時にファイルをいじったときにデスクトップ アプリケーションがひどく壊れるのを防ぐにはどうすればよいですか?
実行中に出力ファイルを削除したり、sw の 2 つのインスタンスを同じ IO に転送したりしますか?
exception-handling - すべてを try/catch ブロックでラップすると、防御的プログラミングになりますか?
私は過去3年間プログラミングをしています。私がプログラミングするときは、既知のすべての例外を処理し、ユーザーに適切に警告します。最近、ほぼすべてのメソッドが try/catch ブロック内にラップされているコードを見たことがあります。著者は、これは防御的プログラミングの一部であると述べています。これは本当に防御的なプログラミングなのだろうか?すべてのコードを try ブロックに入れることをお勧めしますか?
language-agnostic - アプリケーションの外部依存関係をどのように管理していますか?
外部依存関係には多くの種類があります。外部アプリケーション、コンポーネント、またはサービスとのインターフェース (たとえば、電子メールを送信するための Outlook、スキャンのための TWAIN または WIA、さまざまな目的のための ActiveX オブジェクトおよび Web サービスなど)。
アプリケーションが堅牢であり、そのような外部依存関係が (無数の理由で) 利用できない場合でも実行できることを確認するための戦略は何ですか?
注: 独自のソース コードに含まれる外部ソースからのコードは、別の種類の外部依存関係ですが、ここで主に懸念しているのはそれではありません。
java - 防御的プログラミング用のエディター テンプレート
最近、内部状態の公開に関する FindBugs 警告に取り組みました。つまり、配列のコピーを返す代わりに配列への参照が返された場合です。そのコードを簡単に変換できるように、いくつかのテンプレートを作成しました。
防御的プログラミングをサポートするために作成し、SO クラウドと共有したいのはどれですか?
これまでに作成したテンプレート (例):
メソッドから返す配列のコピーを作成するには:
オブジェクトのクローンを作成するには: