如何限制用户在PHP中更改URL

时间:2014-08-04 22:43:54

标签: php url-routing

我想知道如果控制器中有一个需要参数的方法,并且用户手动更改了URL中的参数,并按下输入,则应显示默认页面。下面是我的bootstrap,然后我已经为URL错误创建了一个错误控制器。所以请给出一些编码指南,或者如果我的代码中有一些东西,请更改它。提前谢谢。

<?php
    class App
    {
        protected $controller = 'indexController';
        protected $method = 'index';
        protected $params = array();
        public function __construct()
        {
            $url = $this->parseUrl();
            //print_r($url);
            if (isset($url[0]))
            {
                if (file_exists('app/controllers/'.$url[0].'.php'))
                {
                    $this->controller = $url[0];
                    unset($url[0]);

                }
                require_once('app/controllers/'.$this->controller.'.php');
                $this->controller = new $this->controller;
            }
            else 
                {
                    $error = new errorController();
                    $error->setError("Page Not Found");
                    echo $error->getError();
                }       

            if (isset($url[1]))
            {
                if (method_exists($this->controller,$url[1]))
                {
                    $this->method = $url[1];
                    unset($url[1]);
                }
                else
                {
                    $error = new errorController();
                    $error->setError("Page Not Found");
                    echo $error->getError();
                }

            }
            else
                {
                    $error = new errorController();
                    $error->setError("Page Not Found");
                    echo $error->getError();


                }

            $this->params = $url ? array_values($url) : array();
            call_user_func_array(array($this->controller,$this->method),$this->params);
        }
        public function parseUrl()
        {
            if (isset($_GET['url']))
            {
                return $url =explode('/',filter_var(rtrim($_GET['url'],'/'),FILTER_SANITIZE_URL));
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

方法本身必须检查提供的参数是否有效,否则抛出异常。之后只需捕获异常并触发并显示错误页面。

答案 1 :(得分:1)

好像你可以使用POST和$ _POST,而不是GET。然后,如果用户包含或更改参数将无关紧要,因为您的PHP将忽略它们。