【问题标题】:Joomla component development (version 3.3.3)Joomla组件开发(3.3.3版)
【发布时间】:2014-10-17 08:36:40
【问题描述】:

我有一个正在 joomla 中构建的组件,我只想在该组件是调用代理时从该组件呈现信息。

示例: 我有一个网址http://domain.com/index.php?option=com_mycomp&view=myaccount 从那里我想要一个呈现url的pop/overlay: http://domain.com/index.php?option=com_mycomp&view=mykey&user_id=123

我知道必须有一种方法只让“mykey”视图在从自身调用时呈现,并且不允许直接访问。我查看了登录模块并使用了 JHtml::_('form.token')。不确定这是否是实现这一目标的“最佳实践”方式,或者这是否可行。

非常感谢任何帮助。

Joomla 版本:3.3.3

【问题讨论】:

  • 澄清一下,你想确保用户不能直接在浏览器中输入你的覆盖/弹出的 URL 来访问视图?
  • 是的,没错。自从我发布了这个我已经实现了一个检查用户状态变量的版本,我仍然不确定这是最佳实践。我不能使用 acl bc 它不是基于用户分组,而是基于用户是否输入了对上一个问题的正确答案。

标签: php joomla joomla-component


【解决方案1】:

使用 SSL,对用户会话进行登录验证并验证每个请求的会话,我认为这是最佳实践。 Joomla 提供了一种显示表单令牌字段的机制:

 echo JHtml::_('form.token');

如果您需要将令牌附加到 URL。当想要呈现 HTML sn-ps 时,tmpl=componen 参数很重要。这会将 Joomla 标记为仅呈现组件视图,否则您将获得整个网站;菜单、模块和所有背面:

 echo JRoute::(JUri::root() . '?option=com_mycomponent&view=userscreen&tmpl=component&' . JUtility::getToken() . '=1');

在请求服务器端的另一端,以上面的路径为例,可以用控制器接收:

class MineControllerUserScreen extends JControllerLegacy
{
    public function display($cachable = false, $urlparams = array())
    {
        // Validate the session is valid, die if isn't
        JRequest::checkToken() or die( JText::_( 'Invalid Token' ) );

        // Load the current user object for the active session if needed
        $user = JFactory::getUser();

        // Load the Session object for further validation if needed
        $session = JFactory::getSession();

        // Load sanitized items from POST and GET
        $jinput = JFactory::getApplication()->input;
        $answer = $jinput->get('user_answer', null, 'string');

        // You are satisfied this person is allowed to get this
        parent::display($cachable, $urlparams);
    }
}

这个用例应该在控制器内处理。上面的示例列出了许多可以使用的从 Joomla 获取安全数据的选项;但对于您的情况,我认为将您现有的问题/答案合并为 POST 变量请求,通过令牌和用户验证应该可以解决问题。

这是关于安全编码指南的一般 Joomla 文档。

http://docs.joomla.org/Secure_coding_guidelines

【讨论】:

    猜你喜欢
    • 2016-12-17
    • 2012-11-18
    • 2012-04-22
    • 2012-07-12
    • 2016-05-06
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 2012-05-30
    相关资源
    最近更新 更多