問題タブ [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.

0 投票する
12 に答える
8859 参照

c++ - 64ビット開発に相当する0xDEADBEEF?

32ビットシステム(Linux、Mac OS、Windows、PowerPCまたはx86)のC ++開発では、次のように、そうでなければ未定義になる(たとえば、適切な値をすぐに取得できない)ポインターを初期化しました。

(タイピングとDRYを節約するために、右側は通常定数になります(例:BAD_PTR))。

pIntが適切な値を取得する前に逆参照されると、ほとんどのシステムですぐにクラッシュします(一部のメモリが上書きされたり、非常に長いループに入ったりしたときにクラッシュするのではなく)。

もちろん、動作は基盤となるハードウェアに依存します(ユーザープロセスから奇数アドレス0xDEADBEEFから4バイトの整数を取得することは完全に有効かもしれません)が、クラッシュはこれまでに開発したすべてのシステムで100%信頼できます( Mac OS 68xxx、Mac OS PowerPC、Linux Redhat Pentium、Windows GUI Pentium、WindowsコンソールPentium)。たとえば、PowerPCでは、奇数アドレスから4バイト整数をフェッチすることは不正です(バスエラー)。

64ビットシステムでこれに適した値は何ですか?

0 投票する
3 に答える
554 参照

c# - 悪意のある攻撃に対する防御プログラミング

私が勤めている会社では、社内製品を外用用に再開発しています。

この製品は、最初は WPF を使用して C# で開発され、その後 Silverlight に移植されます。

焦点の 1 つは、SQL インジェクションなどの悪意のある攻撃に対するコーディングです。

質問:

  1. セキュリティの「ベスト プラクティス」に関する記事を指す URL を推奨できる人はいますか。
  2. コードを分析して弱点を特定するための分析ツールを誰でも推奨できますか。可能であれば、継続的インテグレーション スクリプトにツールを含めたいと考えています。
0 投票する
14 に答える
36205 参照

c++ - C++ で機密性の高い文字列を隠すためのテクニック

C++ アプリケーションに機密情報 (非公開にしたい対称暗号化キー) を保存する必要があります。簡単なアプローチはこれを行うことです:

ただし、stringsプロセス (またはバイナリ アプリから文字列を抽出するその他のプロセス) を通じてアプリケーションを実行すると、上記の文字列が明らかになります。

このような機密データを隠すには、どのような手法を使用する必要がありますか?

編集:

OK、ほとんどすべての人が「実行可能ファイルはリバース エンジニアリングできる」と言っていましたが、もちろんです! これは私のペットのおしっこなので、ここで少し怒鳴ります。

このサイトのすべてのセキュリティ関連の質問の 99% (わかりました、少し誇張しているかもしれません) が、「完全に安全なプログラムを作成する方法はありません」という急流で答えられているのはなぜですか - これは役に立ちません。答え!セキュリティは、完全なユーザビリティとセキュリティなしの一方の端と、完全なセキュリティだが他方の端のユーザビリティとの間のスライディング スケールです。

要点は、何をしようとしているか、およびソフトウェアが実行される環境に応じて、そのスライド スケールで自分の位置を選択することです。私は軍事施設用のアプリを書いているのではなく、家庭用 PC 用のアプリを書いています。既知の暗号化キーを使用して、信頼されていないネットワークでデータを暗号化する必要があります。このような場合は、「隠蔽によるセキュリティ」で十分でしょう。確かに、十分な時間、エネルギー、スキルがあれば、バイナリをリバース エンジニアリングしてパスワードを見つけることができます。私は気にしない:

一流の安全なシステムを実装するのにかかる時間は、クラックされたバージョンによる売上の損失よりも高価です (実際にこれを販売しているわけではありませんが、私の主張は理解できます)。新人プログラマーの間のプログラミングにおけるこの青空の「可能な限り最善の方法でやろう」という傾向は、控えめに言ってもばかげています。

この質問に回答していただき、ありがとうございます。とても役に立ちました。残念ながら、私は1つの回答しか受け入れることができませんが、すべての有用な回答に賛成票を投じました.

0 投票する
1 に答える
1102 参照

linq - IOrderedEnumerableおよび防御プログラミング

私は防御的なプログラミングが好きです。私は例外スローが嫌いですが、これは私の質問の主題ではありません。

列名を使用して注文を実行できるように、linQの拡張機能を採用しました

防御プログラミングでは、列名が無効な場合、このメソッドは指定された列挙可能オブジェクトを返します。

次に、ThenByを使用して2次ソートを実行する必要があります。だから私はその署名が必要です:

IOrderedEnumerableを返す必要があります。私の問題は、防御的なプログラミング機能を維持することです。列名が無効である場合、指定されたセットを返す必要があります。

これを行うためのクリーンな方法はありますか?私が考えているのは一種のトリックです:

  • リフレクションを使用して、最初に見つかったプロパティで並べ替えます。これは、プロパティが並べ替えが許可されていない可能性があるため危険です。
  • 独自のIOrderedEnumerableを実装します。これは、IQueryableまたはIListで順序付けを実行し、次に他のLinQ操作を実行するため、リスクもあります。そのため、副作用が心配です。

そしてアドバイス/提案?ありがとう

0 投票する
3 に答える
171 参照

asp.net-mvc - インターネット向けサイト向け ASP.MVC の防御テクニック

私は最終的に公的にアクセス可能な Web サーバーになる最初の asp MVC プロジェクトに取り組んでいます (MVC でいくつかの内部アプリに取り組んできました)。セキュリティを向上させるために、(MVC またはその他に固有の) どのようなテクニックやプラクティスを検討する必要がありますか。

私の頭の上には明らかに、アクションと検証のための AcceptVerb 属性があります。

0 投票する
14 に答える
1677 参照

c++ - あなたはどのくらい防御的であるべきですか?

重複の可能性:
防御的なプログラミング

私たちは今朝、防御的なプログラミングの主題について素晴らしい議論をしました。ポインターが渡され、それが有効かどうかがチェックされなかったコードレビューがありました。

一部の人々は、nullポインタのチェックだけが必要であると感じました。渡されるすべてのメソッドではなく、より高いレベルでチェックできるかどうか、そしてポイントの反対側のオブジェクトが特定の要件を満たしていない場合、nullのチェックは非常に限定されたチェックであるかどうかを疑問視しました。

nullをチェックする方が何もないよりはましだということを理解し、同意しますが、nullだけをチェックすると、範囲が限定されるため、誤った安心感が得られると思います。ポインタが使用可能であることを確認したい場合は、null以外のものをチェックしてください。

このテーマについてのあなたの経験は何ですか?従属メソッドに渡されるパラメーターの防御をコードにどのように記述しますか?

0 投票する
4 に答える
255 参照

code-generation - 堅牢なコード フレームワーク?

私は自分のソフトウェアをより強固なものにするコードを書くのが嫌いです。これは、フレームワークが行うべきことです。では、コードを強化するコード「拡張」ユーティリティを知っている人はいますか?

このようなものを自分で作成する必要がある場合は、次のように機能します。デバッグ フラグを使用してコードをコンパイルすると、各メソッドに「固定化」コードが自動的に追加されます。

try-catch でコードをワープし、キャッチに Debug.Assert(true) を配置します (例外が元の場所でキャッチされるように)。

各メソッドのエントリをログに記録し、引数の "ToString()" 値を出力して、何が起こっているのかを追跡できるようにします。

各引数の null を確認します。

「IsValid」フレームワークを使用して、オブジェクト自体と各引数をチェックします。ここで、IsValid() は、その期待が真であることをオブジェクトが宣言する方法です (たとえば、私が TableOfContentsEntry の場合、IsValid である Book に常にあることを期待します)。 () であり、IsValid() である Page を指します。

では、なぜですか?