总的来说,我是 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/