如何保护PHP / JQuery / Ajax调用?

时间:2015-10-29 22:59:59

标签: php jquery ajax security session

我是Ajax和PHP的新手。到目前为止,我设法对我的PHP脚本进行Ajax调用,该脚本从我的数据库中获取数据。但是,通过测试,我意识到,即使我没有登录,我仍然可以直接访问并运行PHP脚本,当发生这种情况时,它会填充我表中的所有数据,我不想发生这种情况

现在基于此,我发现了一个主要的安全问题,任何人都可以访问并运行脚本并查看用户信息。

现在我不熟悉PHP中的安全性和东西,有点新鲜。我的问题是如何直接使脚本无法访问,或者只有在管理员登录时才能访问它?

我读到我可以检查会话,我试过但是由于某种原因它没有用。所以我会把我编码的内容放在下面。

这是获取数据的PHP,getData.php:

<?php
    session_start(); 
    if(isset($_SESSION['id']) && isset($_SESSION['name']) && isset($_SESSION['admin']) && ($_SESSION['admin']==1)){
        include_once('config.php');
        //Create PDO Object
        $con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
        //Set Error Handling for PDO
        $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        //Query
        $sql = "SELECT users.name, users.email, users.admin, stores.admin, stores.name FROM users INNER JOIN stores ON users.id=stores.admin";
        //Prepare Statement
        $stmt = $con->prepare($sql);
        $stmt->execute();

        while ($row = $stmt->fetch()){
            echo '<tr>';
            echo    '<td>'.$row[4].'</td>';
            echo    '<td>'.$row[0].'</td>';
            echo    '<td>'.$row[1].'</td>';
            echo    '<td>**********</td>';
            if($row[2] == 1){
                echo    '<td>Yes</td>';
            }elseif ($row[2] == 0) {
                echo    '<td>No</td>';
            }
            echo '</tr>';
        }
        $con = null;
    }
?>

这是执行调用以获取数据的ajax。它只是一个片段,但它是一个更重要的东西(点击按钮确切),myAjax.js:

$.ajax({    //create an ajax request to getData.php
    type: "GET",
    url: "includes/getData.php",             
    dataType: "html",   //expect html to be returned                
    success: function(response){     
        $("#userInfo > tbody").html("<pre>"+response+"</pre>");
    },
    error:function (xhr, ajaxOptions, thrownError){
        alert(thrownError);
    }
});

最后,我在用户登录时设置了以下会话:

$_SESSION['id']
$_SESSION['name']
$_SESSION['admin']
  

$ _ SESSION ['admin'] == 1表示用户是管理员。不然吧   不

非常感谢任何帮助。

修改

忘记包含我尝试检查会话的内容。我更新了PHP。

由于

1 个答案:

答案 0 :(得分:1)

我通常会这样做,以检查用户是否显示结果或输出

使用if(!empty($_SESSION['admin'] && $_SESSION['admin']==1 && !empty($_SESSION['name']) && !empty($_SESSION['id']))

使用!empty也会检查变量是否已设置且是否具有任何值!即使变量的值为“null”,使用isset也会显示true。所以它会传递if conditions参数并显示结果。

还有一件事:

当您注销时,您需要使用...

取消设置会话变量
<?php
session_destroy();
session_unset();

这种技术一直伴随着我......谢谢