私はサイトで小さな仕事をするために誰かに雇われました。大企業向けサイトです。非常に機密性の高いデータが含まれているため、セキュリティは非常に重要です。コードを分析したところ、セキュリティホールでいっぱいになっていることに気付きました。読み取り、たくさんのPHPファイルがユーザーのget/post入力をmysqlリクエストとシステムコマンドに直接スローします。
問題は、彼のためにサイトを作った人がその仕事に依存している家族と子供を持つプログラマーであるということです。 「あなたのサイトはスクリプトキッズアミューズメントパークです。あなたのためにやり直させてください。あなたは大丈夫です。」
この状況で何をしますか?
ここでいくつかの良いアドバイスに従い、サイトにセキュリティ上の欠陥がある可能性があることを開発者に丁寧に報告しました。私はその行を指摘し、そこでSQLインジェクション攻撃の脆弱性が存在する可能性があると述べ、それについて知っているかどうか尋ねました。彼は答えた: "確かに、それを悪用するには、攻撃者はデータベースの構造に関する情報を持っている必要があります。私はよりよく理解する必要があります"。
私は常にそうだとは限らず、適切に対処するためにこのスタックオーバーフローの質問リンクをたどることを提案しました: PHPでのSQLインジェクションを防ぐ方法は? 彼はそれを研究するつもりであると言ってくれたことを感謝しました前に彼。皆さん、私の役目は完了したと思います。
ここで何よりもまず、優先事項はセキュリティホールを閉じることです。
これを書いたエンジニアと直接作業している場合は、すべてを文書化して、そのエンジニアに渡してください。
そうでない場合は、セキュリティの問題が当初考えられていたよりも大きく、サイトにlotの作業が必要であることを雇用主に伝えます。サイトにいるメインの開発者と協力して、PHPセキュリティについて教えることを申し出ます(その人をエキスパートにすることを約束しないでください。知っている)あなたが終わった後にその人がそれを引き継ぐことができるように。
しないでくださいこれを「この人は悪い、彼を解雇する」問題にしてください。 「ねえ、統計情報を修正する必要のある潜在的なバグを見つけました。これは、サイトのセキュリティについての無知/一般的な誤解から来ているようです。サイトを改善できるように、開発についてもお話ししたいと思います。うまくいけば、将来これらの問題の多くを避けてください。」
無知と無能には違いがあります。 SQLインジェクションが何であるかを知らなかった時期があり、元のプログラマーが問題を認識した後で問題を修正できないと信じる理由はありません。
だから彼らに言ってください。具体的かつ客観的になり、質問に答え、エクスプロイトの例を提供し、修正の推奨事項を提供できるようにします。それでもそれが得られない場合、あなたが実際にできることのほとんどは、自分の個人情報をサイトに載せないことです。
あなたの仕事は彼のためにサイトをやり直すことではありません。小さなバグを修正することです。ただし、修正が必要なセキュリティの問題に気付いた場合は、サイトの所有者に連絡して、問題が何であるかを洞察することができます。
元の開発者を批判したり、否定的に話したり、コードがどれほどひどいかについてコメントしないでください。敬意と専門性を持ちます。開発者と協力して問題を解決することを提案できます。あなたが問題に対処するように契約しているのでない限り、自分でそれを修正したり、解決策を提供したりしないでください。彼らがあなたのアドバイスに従い、あなたが間違っていると、彼らはあなたに戻ってくるかもしれません。
何よりもまず-彼らがあなたに雇ったものを修正します。そうしないと、仕事を終わらせるのではなく、自分のためにもっと仕事をすることに興味があるタイプのコンサルタントとして認識されます。
修正に加えて、セキュリティの観点から間違っていることに気付いたもののリストと、それらがなぜ間違っているのかを彼らに提供する必要があります。
問題を報告しないことは、何の役にも立ちません。特定のタスクを実行するために雇われたが、他のセキュリティ問題を確認しながら文書化し、適切な個人(おそらく、雇われたタスクについて報告している個人)に報告します。
これは、強力なソフトスキルが有効に機能する状況であり、これを巧みに処理するには、サイトで他の人が行った作業を中断せず、開発者に彼の才能を疑うような感覚を与えないようにする必要があります。
サイトを作成した開発者向けのコード/欠陥や類似の単語を参照するときは、「がらくた、悪い、貧しい、なぞなぞ」のような単語は明らかに避けてください。
他の回答に加えて、SQLインジェクションの問題をいかに簡単に悪用できるかについて、開発者にいくつかのリソースを紹介することもできます。たとえば、自動SQLインジェクション悪用ツールである sqlmap です。
私が過去にこの種の問題の深刻さを実証するのに効果的であるとわかったのは、それで何ができるかを示しているので、開発者に対してそのような何かを実行した場合です。データの抽出などを示すためにサイトのコピーを使用して、深刻さを彼らに納得させることができます。
最初かつ唯一。経営陣は問題について聞きたくありません。私は彼らのシステムがいかに安全でないかを指摘したので、人事管理局(ホワイトハウスのセキュリティクリアランス)から解雇されました。しばらく前のことですが、経営姿勢は変わっていません。
電子メールを介して開発者に問題を解決し、トレイルを作成してから、徒歩または逃走します。彼らが最終的に問題を抱えている場合、請負業者として、問題にリモートで接続されているかどうかに関わらず、彼らはあなたを責めようとします。
SQLインジェクションと同じくらい根本的な問題があるということは、最初にシステムを開発したときは安かったことを示しています。彼らがまだビジネスをしている間に彼らからあなたができることを手に入れてください、しかし他の場所でビジネス開発を求めてください。