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

标签 php jquery ajax security session

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

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

现在我不熟悉 PHP 中的安全性和其他内容,对它有点陌生。我的问题是如何让脚本无法直接访问,或者只有在管理员登录后才可以访问?

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

这是获取数据的 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 :

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

$_SESSION['admin'] == 1 means the user is an admin. Otherwise it's not.

非常感谢任何帮助。

编辑:

忘记包括我试图检查 session 的内容。我更新了 PHP。

谢谢

最佳答案

我通常这样做是为了检查用户是否登录并显示结果或输出

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

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

还有一件事:

当您注销时,您需要使用...取消设置 session 变量

<?php
session_destroy();
session_unset();

这种技术一直对我有用......谢谢

关于php - 如何保护 PHP/JQuery/Ajax 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33426099/

相关文章:

php - HTML ajax 响应不执行 javascript 函数

javascript - 将jQuery变量传递给PHP以进行错误处理

php - 使用 PHP 将文本插入 MySQL 时如何处理(在服务器端)&符号?

php - Google API 国家/地区检测 PHP

jquery - 当我通过 ajax 调用用 html 替换 div 时,Bootstrap 下拉菜单不起作用

jquery - AJAX 调用后无法使用 DOM 元素

c# - Ajax 发布不工作 MVC 5

php - 如何向 php 添加 +1 值

对 MYSQL INSERT 的 PHP 调用挂起

javascript - 如何使用 PHP 或 JS 检索 IDFA/AdID 以用于 dc_rdid 属性?