[英]How to secure PHP/JQuery/Ajax calls?
我是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。
謝謝
我通常會這樣做,以檢查用戶是否插入或不顯示結果或輸出
使用if(!empty($_SESSION['admin'] && $_SESSION['admin']==1 && !empty($_SESSION['name']) && !empty($_SESSION['id']))
using!empty也會檢查變量是否設置且是否有任何值! 即使變量的值為“null”,使用isset也會顯示true。 所以它會傳遞if conditions參數並顯示結果。
還有一件事:
當你注銷時,你需要使用...取消設置會話變量
<?php
session_destroy();
session_unset();
這種技術一直伴隨着我...謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.