回答:
やや。免責事項:私はセキュリティ担当者です;)
だから私が働く方法は、どのような種類の攻撃者がどのような種類の攻撃を行う可能性が高いかを表す脅威モデルを持っているということです。これは、セキュリティ要件を解決するのに役立ちます。実際にコーディングしているときは、カーソル変数が常に境界内にあるように注意し、汚染された入力を無害化し、エラー条件を処理するなど、通常の「安全なコーディング」を行います。次に、脅威モデルに戻り、攻撃者の標的になる可能性が最も高いモジュールを確認します。それらはいくつかの追加のレビューを取得します。
SQLパラメータの使用など、業界標準の方法を使用しています。.NET Frameworkのような「安全な」プラットフォームを使用し、ASP.NET MVCの偽造防止トークンなどのセキュリティ機能を利用しています。私は独自の暗号化アルゴリズムを記述していませんが、それらの暗号化がセキュリティ上の利点の方法で提供するもの、およびそれらを使用してそれらのセキュリティ上の利点を取得する必要がある場合について理解しています。
要するに、私はベストプラクティスを使用していますが、独自のセキュリティツールを開発していません。私はその点ではセキュリティの専門家ではありません。私はおそらくこれらの問題についてすでに深く考えており、リスクと利点を明確に理解している他のセキュリティ専門家に依存しています。
セキュリティへの私の基本的なアプローチは、単にセキュリティツールを使用することを超えて、私が期待しているものを除いて、システムへのすべての可能な入力を排除することです。社会保障番号フィールドがある場合、実際に表示されるのは、特定のパターンの数字とダッシュだけです。
クライアントとサーバーの両方でユーザー入力を検証します。
もちろんです。
セキュリティがすべてです。そして、数値計算ソフトウェアでは、それは2度行われます。
つい先日、ユーザーが私の古いプログラムの1つでバグを見つけて悪用することができました。損傷は修復不可能でした。下記参照:
以前は丸かったです。
私はセキュリティの専門家ではありませんが、Webアプリケーションをコーディングするときは常に、ユーザー入力にあらゆる種類の奇妙さが含まれている可能性があり、常に完全にエスケープする必要があると思います。また、Ajaxをサーバーにコールバックして、ユーザーがログインしていること(ユーザーが特定のイベントに必要な場合)、およびユーザーが実行しようとしていることをすべて実行する権限があることを確認します。
コードベースには、入力用の一連のフィルターがあります。PHP $_GET
や$_POST
配列を直接チェックすることはありません。代わりに、私は機能を介してそれらを照会するRequest::get('parameter', 'filter')
ようなフィルタを使用してint
、text
、およびいくつかの他。(Request::post()
もちろん、POST入力の場合)。
セキュリティの一般的な原則(整合性、認証、権限)を理解し、人々が何千年もの間これらのセキュリティの柱をどのように覆してきたかについて数冊の本を読んでください。
次に、設計およびテスト戦略に関するいくつかの優れた本を読み、アーキテクチャにテスト容易性を設計する方法を学びます。
さて、私がセキュリティについて考えるときがやってきました。データソースを検証する方法を考えていますが、データが改ざんされているかどうか、データソースが誰であるか、それがどれほど確実かどうかは重要ですか?どのように変更されたのでしょうか...
これは設計に影響します。構成ファイルにはキーセクションが暗号化されている場合や、特定のフィールドがクリアテキストで関連付けられた署名フィールドを持つ場合があります。あなたはそこでより高いレベルの敵意を期待するべきであるので、物事はインターネットに面したサービスでより複雑になります。
次にテストでは、これらすべてをどのようにテストしますか。最大データエントリは何ですか?ソフトウェアをこれらの制限を超えてプッシュするとどうなりますか?どのように処理しますか?それは何を信頼していますか?どのようにしてその信頼を偽造できますか?
はい。
私は過去に十分なハッカーに対処したことがあります。彼らは常に大きなサイトを危険にさらそうとしていることを知っていて、小さなサイトでさえ安全ではないほど十分なボットがそこにあります。
私はいつもハッカーのように考えて、毎日当たり前のシステムがどのようにゲームされているのかについてのカジュアルなコメントで同僚を時々心配するところまで、私はいつも考えています。
これは、アプリケーションなどに応じて、開発者がプロセスに根本から多かれ少なかれ組み込むものでなければなりません。残念ながら、開発者はセキュリティを引用する傾向がないため、バイヤーはそれを考える傾向がありません(私は知っています、これは少しキャッチ22です。買い手が最も安い見積もりを求めている場合、セキュリティが含まれていない可能性があるためです)
開発者として、この分野に熟練していれば、確実に有利になります。私は特に銀行と金融サービスについて考えていますが、他の業界にも適用できます。現在、彼らは70〜10万人の予算で、新卒者がプロセス、セキュリティ、およびその組織のその他の詳細について習熟するためのトレーニングを行っています。それらの30kを保存できる場合、それは良いCVプラスです!
英国では、Information of Information Security Professionals、およびスコットランドでは、Center of Excellence in Security and Cybercrimeが大学と緊密に連携して、コース資料のレビュー、貧弱なコーディングの現実世界への影響、および夏の配置の促進に関するゲストレクチャー(例:法執行機関の不正部門に配置されたソフトウェア開発者。)多くのお金を節約できる可能性があるため、ほとんどの支援組織はこれを無料で行っています。
(免責事項-私はさまざまなグローバル組織のセキュリティ担当者でした)