在php中,从数组中动态创建一个变量来读取$\u GET方法,这是一种不好的做法吗

在php中,从数组中动态创建一个变量来读取$\u GET方法,这是一种不好的做法吗,php,arrays,get,dynamic-variables,Php,Arrays,Get,Dynamic Variables,在查看工作中的一个php类文件时,我发现了一个有趣的片段。脚本正在动态创建一个变量,动态检查它所创建的变量是否有活动的$\u GET['',是否有,它是否正在加载$\u GET数据,如果没有,它正在向它动态创建的变量写入N/a。然后,该脚本继续执行一个切换函数,该函数的大小写中断逻辑相同 这安全吗 2)它能被攻击吗 3.)有没有更简单的方法 4)你为什么要这样做 $switch_types = array("id","type","page"); foreach ($switch_types

在查看工作中的一个php类文件时,我发现了一个有趣的片段。脚本正在动态创建一个变量,动态检查它所创建的变量是否有活动的$\u GET['',是否有,它是否正在加载$\u GET数据,如果没有,它正在向它动态创建的变量写入N/a。然后,该脚本继续执行一个切换函数,该函数的大小写中断逻辑相同

这安全吗

2)它能被攻击吗

3.)有没有更简单的方法

4)你为什么要这样做

$switch_types = array("id","type","page");

foreach ($switch_types as $key => $value) {
    $$value = $value;
    if(isset($_GET[$$value])){
        $$value = $_GET[$$value];
        }
    else{
        $$value = "N/A";
    }        
}

这基本上只是一种冗长的写作方式:

$id = isset($_GET['id']) ? $_GET['id'] : 'N/A';
$type = isset($_GET['type']) ? $_GET['type'] : 'N/A';
$page = isset($_GET['page']) ? $_GET['page'] : 'N/A';
它是完全安全的,因为要分配的变量列表是在程序中指定的,而不是动态地来自客户端

他的循环中有一些不必要的代码--
$$value=$value
不需要。可以简化为:

foreach ($switch_types as $value) {
    if(isset($_GET[$value])){
        $$value = $_GET[$value];
        }
    else{
        $$value = "N/A";
    }        
}
或:


就安全性而言,我不认为这本身就是一种风险,这一切都取决于一旦变量填充了查询字符串的内容,您将如何处理它们取决于它的使用位置。它主要是+的一个冗长变体。(“坏习惯”和“安全?”使得这个问题过于宽泛,没有进一步的细节。)我不太喜欢动态创建这样的变量。。。用提取物或。。。正在启用注册全局变量。。。如果我在您的代码中搜索
$page
,我将无法找到it@mario这是否有助于扩大范围?安全:这是可以被用户输入破坏的东西吗?错误的做法:如果这是安全的,那么可以编写一个简化的函数,或者已经有一个函数执行代码段当前正在执行的操作。代码段本身是无害的。变量本身不会引起麻烦。这仍然取决于他们之后如何使用。为了可读性而本地化有时是有益的,有时则没有那么多我个人会用类似的东西来代替它,比如just
extract($\u GET->multi->text[“id,type,page”])取而代之。(你不能用那个)。
foreach ($switch_types as $value) {
    $$value = isset($_GET[$value]) ? $_GET[$value] : 'N/A';
}