我是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。
由于
答案 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();
这种技术一直伴随着我......谢谢