【问题标题】:Restrict people by using PHP GET Variable使用 PHP GET 变量限制人员
【发布时间】:2012-11-12 07:47:43
【问题描述】:

在一个面试问题中,我得到了以下问题

“如何在自定义构建框架中限制开发人员 使用$_GET 变量。”

我们有自己的自定义构建框架,但在我们的框架中,我们不能限制人们使用$_GET$_POST 代替$this->request->get$this->request->post

我们有访问此变量的方法,但人们大多数时候使用$_GET$_POST 而不是我们的方法。

你能给我答案吗?

谢谢

【问题讨论】:

  • 为包含 $_GET/$_POST 的代码创建一个存储库 reject 并指示违规方使用什么技术:) (或者,不要拒绝,而是责备/代码审查:同样的想法 - 检测并纠正。)
  • 无论您采用何种解决方案,开发人员始终能够parse_str(getenv('QUERY_STRING'), $_GET=array()) 绕过它。

标签: php get


【解决方案1】:

在 php.ini 中,从 variables_order 选项中删除 GP 字符。

或者,如果你想让他们永远恨你,你可以复制超全局的内容,然后将它设置为一个类的实例,当你尝试与之交互时,它就会抛出异常:

class supaglobal implements arrayaccess
{
    public function _construct(){}

    function offsetExists($offset) {
        throw new Exception("Don't use GET, bro");
    }
    function offsetSet($property, $value){
        throw new Exception("Don't use GET, bro");
    }
    function offsetUnset($property) {
        throw new Exception("Don't use GET, bro");
    }
    function offsetGet($property){
        throw new Exception("Don't use GET, bro");
    }
}

$approvedget = $_GET;
$_GET = new supaglobal();
$abcd = $_GET["abcd"]; // throws exception
$abcd = $approvedget["abcd"]; // A - OK

【讨论】:

  • 提到$this->request->get$this->request->post 可能使用$_POST$_GET。因此,通过删除 GP,这些属性将返回 null
猜你喜欢
  • 2015-12-12
  • 2011-06-04
  • 1970-01-01
  • 2011-03-23
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
相关资源
最近更新 更多