还真不太清楚,我平常也这么写。应该是防sql注入的吧。在$$key时会去除一些,';号之类的。

解决方案 »

  1.   

    只是为了方便,不用老在代码中写$_GET[xxxx],$_POST[xxxx]这样的东西论坛里一般不会有谁cookie的变量跟普通变量重名,很少有人这么做的谈到安全隐患,即使使用$_POST[xxxx]也只能防止用url传递变量的问题
    同样可以伪造一个post传递,没有什么太多的必要性!最终还是靠验证变量最合适
      

  2.   

    PHP中有个选项是register_globals,这个选项为on的时候,你提交的参数会直接变成变量.包括直接提交在URL上的,和POST中的参数.比如http://abc.com/abc.php?action=12345//abc.php
    <?
    echo $action
    ?>由于变量$action被默认定义,于是输出结果是"12345";然后PHP的发明者觉得这样做有非常大的安全隐患,于是在PHP4.2.0以后的版本中,register_globals选项默认就为off,所有提交的参数不会变成变量.上面例子中,$action变量就是未定义变量.不过你可以用$_GET['action']访问这个提交的变量.关于这个register_globals选项,必须是服务器提供商才能设置.既然4.2.0以后的版本都是off了,那么有些脚本必须用到或者说程序已经习惯了register_globals为on的环境怎么办.于是就有了你给出的那些代码.那些代码的意思就是模拟出一个register_globals为on的环境,把所有提交的参数直接定义成变量.
      

  3.   

    “如本来GET 中有一个name变量 如果cookie上也来一个name的cookie不是会被替换了吗?”
    是的,会被替换掉。
    请注意这样一个事实,当register_globals=on时,php的“魔术”变换是按照GET、POST、COOKIE、SESSION的次序进行的,后者覆盖前者。此默认次序可由variables_order改变