Joomla使用ajax.php限制访问

时间:2015-01-06 06:49:00

标签: php ajax joomla

在插件中:

echo "<script type='text/javascript'>
            $.noConflict();
            $(function(){ 
                jQuery('.aa').click(function(){
                    jQuery.ajax({
                        type:'POST',
                        url:'/ajax.php',
                        data:'articleId='+articleId,
                        success: function(){
                            alert('yes');
                        },
                        error: function(){
                            alert('no');
                        }
                    });
                });
            });
        </script>";

ajax.php:

<?php
defined('_JEXEC') or die('Restricted Access' . __FILE__);

$db = JFactory::getDBO();
$user = JFactory::getUser();


extract($_POST); 


$db->setQuery('SELECT * FROM `#__c` WHERE id = "'.$articleId.'"');


$db->setQuery('SELECT a FROM `#__u` WHERE user_id = "'.$user->id.'" AND a IN ('.$articleId.')');
$a = $db->loadRowList();

$a_array = array();
if (!$a){
    $a_array[] = $articleId;        
    $combined_a = implode(",", $a_array);


    $Updatesql = "UPDATE `#__c` SET b=1 WHERE id = ".$articleId;
    $db->setQuery($Updatesql);
    $db->query();
}



?>

我将ajax.php放在我的joomla文件夹中:/public_html/ajax.php

  • 得到警觉('是'),没有别的
  • 检查并查看网络&gt;点击了ajax.php&gt;得到了“限制访问”。我想是因为我在我的ajax.php中有它。

如何才能访问并执行ajax.php?

谢谢!

2 个答案:

答案 0 :(得分:0)

要访问外部文件,您无需输入

defined('_JEXEC') or die('Restricted Access' . __FILE__);

刚刚从脚本中删除它,它将起作用。

答案 1 :(得分:0)

如前所述,第一行是您收到消息的原因:

defined('_JEXEC') or die('Restricted Access' . __FILE__);

Joomla的标准方法是确保只通过Joomla CMS框架访问PHP文件,即通过它index.php/administrator/index.php

通过这些index.php路由所有请求允许Joomla做几件事:

  1. 确保仅在用户有权访问时才执行PHP文件。
  2. 防止代码被用作攻击媒介或DoS漏洞利用
  3. 为正在执行的PHP文件提供令牌,会话和应用程序上下文。
  4. 如果您要使用Joomla框架功能,则第3点是必不可少的:

    $db = JFactory::getDBO();
    $user = JFactory::getUser();
    

    返回Database对象和当前用户对象。我确定您可以看到为什么不控制对数据库的访问或用户详细信息是非常糟糕的事情

    根据您正在使用的Joomla版本,有几种不同的方式可以从您的自定义扩展程序向Joomla CMS进行AJAX调用,例如在3.2中添加一个新的&#34; Joomla Ajax Interface&#34;被添加以暴露很多Joomla内容。

    鉴于可用的方法种类繁多,我建议您阅读answer provided网站上非常好的Joomla Q&A StackExchange