簡體   English   中英

如何保護PHP / JQuery / Ajax調用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM