これは非常に古い投稿だと思いますが、誰かが探しているなら、ここに答えがあります。
$ _POSTでextractを使用せずにこれを自動化する安全な方法があります。これは、前述のセキュリティリスクです。この関数は、期待する単純なキーの配列をフィードすると、$_POSTで機能します。
function post_params($arr){
$pp = array();
foreach($arr AS $key){
if(isset($_POST[$key])){
$pp[$key] = $_POST[$key];
}
}
return $pp;
}
次に、関数を呼び出すときに、次のようにします。
$expected_post_keys = array('firstname','lastname');
$safe_post_arr = post_params($expected_post_keys);
extract($safe_post_arr);
$ _GETの場合、次のようないくつかの追加の対策を講じることができます($ _POSTでもこの方法で行うことができます)。
function get_params($arr){
// arr predefined explicitly - do not call with _GET as argument
$gp = array();
foreach($arr as $key){
if(isset($_GET[$key])){
$gp[$key] = htmlspecialchars($_GET[$key]);
}else{
$gp[$key] = 0;
}
}
return $gp;
}
関数を呼び出すと:
$valid_get_keys = array('id','action');
$safe_get_arr = get_params($valid_get_keys);
extract($safe_get_arr );
このメソッドは、期待するすべての変数/キーを提供しますが、$ _ GETで定義されていない場合、値は0になります。
これを頻繁に行う必要がある場合は、両方のメソッドをクラスに入れるだけで自動化されます。_GETまたは_POSTを取得する必要があるスクリプトでは、クラスを呼び出してから、必要なキーを入力して必要なメソッドを呼び出すことができます。