11

昨日、PHP開発者のポジションのインタビューに参加しました。私の仕事は、15の質問を非常に簡単なテストで解くことでした。質問の1つは、以下のようなコードを安全でないものとして扱うべきかどうかを判断することでした。私は(結局のところ)間違った答えを出しました、そしてそのインタビューでの他の人からの議論は(少なくとも私にとっては)非常に驚くべきものでした。

コードは次のようなものでした:

function someFunction($a)
{
    echo $a * 4;
}

someFunction($_GET['value']);

考えられる答えは次のとおりです。

  • いつも、
  • register_globalsが有効になっている場合のみ、
  • 一度もない。

あなたは正解のための1つのポイントと答えが選ばれた答えについての良い説明(議論)を与えるための2番目のポイントを得ることができます。

私の答えは3番目でした:このコードは決して安全ではありません。プラスの議論:なぜなら、これは単なる方程式だからです。ここにはファイルやデータベースの操作はなく、ストリーム、プロトコル、何もありません。それは単なる方程式です。他には何もありません。攻撃者は、不正な形式のURLクエリを実行しようとしても、PHPスクリプトで何も悪いことをすることはできません。チャンスは無い。

私はゼロポイントを持っています。私の答えは正しくなく、私の議論も受け入れられませんでした。正解は次のとおりです。このコードは常に安全ではありません。URLクエリから取得したものを常にエスケープする必要があります。

私の質問は:これは本当に良い視点ですか?クエリから直接取得したものは、フィルタリング、エスケープ、または他の方法で保護しない限り、安全ではないという経験則を常に使用する必要がありますか?これは、私が生徒にunsefeコーディング方法論を教えることを意味します。これは、最初のPHP講義で、三角形の領域を計算するためのスクリプトを作成し、タスクでURLからのエスケープされていないフィルタリングされていないパラメーターを使用しているためです。

私は、セキュリティと安全なコードの記述が最優先事項であることを理解しています。しかし、その一方で、安全でないコードを脅かすための少しの安全なコードファシズム(誰かを怒らせた場合は許してください)は、誰もそれを害することはできませんが、そうではありませんか?

あるいは、私が完全に間違っていて、4倍をエコーする関数に害を及ぼす可能性があります。あなたはそれに何を与えましたか?

4

3 に答える 3

7

問題は、後で誰かが関数'somefunction'を変更し、単に4を掛ける以上のことをする可能性があることです。

関数自体は安全ではありませんが、次の行があります。

 someFunction($_GET['value']);

完全に危険です。たぶんsomeFunction、別のファイルにリファクタリングされるか、コードのかなり下にあります。自分自身や、純粋な$ _GET配列データを渡すことを期待せずに、どこかで捕らえられていない場所でライブラリや関数を操作している他の人を保護するために、常にユーザー提供のデータをチェックしてスクラブする必要があります。

これは、他の人と協力する場合に特に当てはまり、インタビューで尋ねられる理由です。将来の潜在的な問題を先取りするかどうかを確認するために、someFunction危険な可能性のあるGETデータを渡すときに現在無害であることを理解していることを確認しないでください。同僚がsomeFunctionをリファクタリングしてDBテーブルをクエリすると、問題になります。

于 2012-10-26T20:08:24.950 に答える
0

コード例をいじるのに多くの時間を費やしていないので、「害を及ぼす」ために使用できるとは言いませんが、何らかの形の数値が渡されない限り、関数は正しく機能しません。長期的には、コードをエスケープし、誤ったデータを処理してから、疑いを持たないユーザーが間違ったタイプの値をボックスに入れて問題が発生する日を待つ方がよいでしょう。あなたがインタビューした会社は、コードが完全で壊れないことを確認するという確かな習慣を持った人を探していたと確信しています。

于 2012-10-26T20:09:18.717 に答える
0

ユーザーから発信されたものは絶対に信用しないでください。いけません。コード/クラス/パッケージが悪用される可能性を推測できない場合でも、製品への入力が期待どおりであることを確認して、自分の尻を覆ってください。驚くことではありません。最低限でも、誰かがそのメソッドに悪い入力を提供して、アプリを台無しにしたり、エラーを表示したり、死の白い画面を表示したりする可能性があります。基本的な乗算を行うコードは、その種の悪意の第一候補です。これは、PHPだけでなく、プログラミング/設計全般に適用されます。

于 2012-10-29T01:57:52.990 に答える