如何创建不可访问的控制器操作?

发布于 2024-11-07 09:28:00 字数 210 浏览 0 评论 0原文

在我的一个控制器中,我使用 codeigniter 的表单验证助手。我的验证规则之一是我创建的返回 true 或 false 的自定义函数。 问题是,这个验证函数是在控制器的类中声明的。如何防止用户将我的验证函数作为控制器操作 (mysite/mycontroller/my_callback_func) 浏览?

PS - 尝试将函数设置为私有,但我收到错误消息,验证助手无法访问该函数。

In one of my controllers, i use codeigniter's form validation helper. One of my validation rules is a custom function that i created that returns true or false.
Problem is, that this validation function is declared inside the controller's class. How do i prevent users from browsing to my validation function as a controller action (mysite/mycontroller/my_callback_func)?

P.S. - Tried to set the function as private but I'm getting an error that it's not accessible for the validation helper.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

初熏 2024-11-14 09:28:00

只需以下划线开头的函数/方法名称即可。

直接来自 ./system/core/CodeIgniter.php

/*
 * ------------------------------------------------------
 *  Security check
 * ------------------------------------------------------
 *
 *  None of the functions in the app controller or the
 *  loader class can be called via the URI, nor can
 *  controller functions that begin with an underscore
 */
    $class  = $RTR->fetch_class();
    $method = $RTR->fetch_method();

    if ( ! class_exists($class)
        OR strncmp($method, '_', 1) == 0
        OR in_array(strtolower($method), array_map('strtolower', get_class_methods('CI_Controller')))
        )
    {
        show_404("{$class}/{$method}");
    }

Just start the function/method name with an underscore.

Straight out of ./system/core/CodeIgniter.php:

/*
 * ------------------------------------------------------
 *  Security check
 * ------------------------------------------------------
 *
 *  None of the functions in the app controller or the
 *  loader class can be called via the URI, nor can
 *  controller functions that begin with an underscore
 */
    $class  = $RTR->fetch_class();
    $method = $RTR->fetch_method();

    if ( ! class_exists($class)
        OR strncmp($method, '_', 1) == 0
        OR in_array(strtolower($method), array_map('strtolower', get_class_methods('CI_Controller')))
        )
    {
        show_404("{$class}/{$method}");
    }
记忆里有你的影子 2024-11-14 09:28:00

只需定义您的函数 private 并在函数名称前添加 uderscore 即可,例如:

class Some_class extends CI_Controller{

     private function _some_method(){}
}

simply define your function private and put an uderscore befor the function name for example :

class Some_class extends CI_Controller{

     private function _some_method(){}
}
莫相离 2024-11-14 09:28:00

相反,我会将其设为辅助函数。为此,请将文件放入 system/application/myval_helper.php 中,然后在其中添加您的函数。然后只需调用:

$this->load->helper('myval');

您就可以访问该函数。另一种替代方法是简单地使用 .htaccess 来阻止该确切的 URL。

I would instead make it a helper function. To do so, put a file in your system/application/myval_helper.php, then add your function in there. Then just call:

$this->load->helper('myval');

And you'll be able to access the function. Another alternative is to simply use .htaccess to block that exact URL.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文