昨日、PHP開発者のポジションのインタビューに参加しました。私の仕事は、15の質問を非常に簡単なテストで解くことでした。質問の1つは、以下のようなコードを安全でないものとして扱うべきかどうかを判断することでした。私は(結局のところ)間違った答えを出しました、そしてそのインタビューでの他の人からの議論は(少なくとも私にとっては)非常に驚くべきものでした。
コードは次のようなものでした:
function someFunction($a)
{
echo $a * 4;
}
someFunction($_GET['value']);
考えられる答えは次のとおりです。
- いつも、
register_globals
が有効になっている場合のみ、- 一度もない。
あなたは正解のための1つのポイントと答えが選ばれた答えについての良い説明(議論)を与えるための2番目のポイントを得ることができます。
私の答えは3番目でした:このコードは決して安全ではありません。プラスの議論:なぜなら、これは単なる方程式だからです。ここにはファイルやデータベースの操作はなく、ストリーム、プロトコル、何もありません。それは単なる方程式です。他には何もありません。攻撃者は、不正な形式のURLクエリを実行しようとしても、PHPスクリプトで何も悪いことをすることはできません。チャンスは無い。
私はゼロポイントを持っています。私の答えは正しくなく、私の議論も受け入れられませんでした。正解は次のとおりです。このコードは常に安全ではありません。URLクエリから取得したものを常にエスケープする必要があります。
私の質問は:これは本当に良い視点ですか?クエリから直接取得したものは、フィルタリング、エスケープ、または他の方法で保護しない限り、安全ではないという経験則を常に使用する必要がありますか?これは、私が生徒にunsefeコーディング方法論を教えることを意味します。これは、最初のPHP講義で、三角形の領域を計算するためのスクリプトを作成し、タスクでURLからのエスケープされていないフィルタリングされていないパラメーターを使用しているためです。
私は、セキュリティと安全なコードの記述が最優先事項であることを理解しています。しかし、その一方で、安全でないコードを脅かすための少しの安全なコードファシズム(誰かを怒らせた場合は許してください)は、誰もそれを害することはできませんが、そうではありませんか?
あるいは、私が完全に間違っていて、4倍をエコーする関数に害を及ぼす可能性があります。あなたはそれに何を与えましたか?