站点用户可以将自己的参数传递给模型函数吗?

时间:2011-05-23 08:42:39

标签: php security codeigniter session

用户可以直接访问模型中的函数吗? 用户可以直接将参数传递给模型中的函数吗?或者,参数是否必须通过php传递?

换句话说: 我有一个名为notification的模型,在那里有一个名为get_notifs($user)的函数......我使用控制器调用函数,如get_notifs($_SESSION['user_id'])(加密)。我不希望有人能够用{$ 1se}作为参数调用get_notifs()。什么是最好的解决方案?

  • 我已经好了吗?
  • 我应该将get_notifs()重命名为 _get_notifs()
  • 我应该检查一下 方法中$_SESSION['user_id'] 本身?
  • 或者,还有其他更好的解决方案

    比其中任何一个?

我有一个控制器:ajax.php,它加载模型通知

    function __construct()
        {
        parent::__construct();
            $this->load->helper('url');
            $this->load->library('tank_auth');
            $this->load->model('notification');
            $this->load->model('search');
        }
function get_notifs()
    {
    $me = $this->session->userdata('user_id');
    if ($e = $this->notification->get_notif($me))
    {
 ...........
    }           
    else{
        echo "nothing was found wtf?";
    }

............................................... .......... 型号:notification.php

function get_notifs($user){
......
}

2 个答案:

答案 0 :(得分:1)

你的代码非常好!

  • 我已经好了吗?
    • 我想是的
  • 我应该将get_notifs()重命名为_get_notifs()吗?
    • 不,这是一种公共方法,所以不需要让它看起来是私密的。
  • 我应该检查方法本身的$_SESSION['user_id']吗?
    • 不,这是控制人员的工作
  • 或者,还有其他更好的解决方案吗?
    • 您只需要一个问题的解决方案,我在这里看不到问题

听起来似乎是你的应用程序可能被其他人使用,即公共开发人员,你为什么要强制开发人员按你自己的方式编写代码,这会让他们对你的应用程序感到不安。

CI仅将请求路由到控制器,用户无法访问模型或库或任何其他类,路由如下:/controller/method/param

第一个段只会加载一个控制器文件,第二个段将调用param中的方法,将任何其他变量(如param)传递给该方法。 enter image description here 资料来源:http://codeigniter.com/user_guide/overview/appflow.html

从上面的流程图中可以看出,只有控制器才能访问模型的

答案 1 :(得分:0)

如果您只在会话中使用它,最好的方法是:

function get_notifs(){
    if(!isset($_SESSION['user_id'])){
        return false;
    }

    $user = $_SESSION['user_id'];

    /* Your code here */
}

当你只使用一个特定变量的函数时,没有必要进行论证,这个变量也是全局可用的。

编辑:我不知道为什么你在模型中使用函数。没有任何意义,你的意思是方法吗?