簡體   English   中英

如何以安全的方式在ajax和php之間發送數據?

[英]How to send data between ajax and php in secure way?

我有index.phpajax.jsprocess.php (在這里獲取我的AJAX數據)。

我以這種方式使用AJAX:

var = $('user_id').val();

$.ajax({
    url     : "somefile.php",
    method  : "GET",
    data    : {'user_id' : user_id},
    cache   : false,
    success : function(data) {
          // do something with "data"
    }
);

我從PHP文件收到的User_id:

    <input value="<?php echo $user_id; ?>" id="user_id" />

我需要做些什么來提高安全性?

可以添加以下內容,只是為了提高安全性,

用PHP代碼

<input value="<?php echo base64_encode($user_id); ?>" id="user_id" />

在JS代碼中:

var = $('user_id').val();

$.ajax({
    url     : "somefile.php",
    method  : "POST",
    data    : {'user_id' : user_id},
    cache   : false,
    success : function(data) {
          // do something with "data"
    }
); 

在“ somefile.php”中,如果僅接受使用POST方法發布的變量,則使用$ _POST方法。 可以使用:

if(isset($_POST['user_id']))
{
$user_id=$_POST['user_id']
$user_id=base64_decode($user_id);
//all functionality here
} 
else
{
//shoot error message
}

我建議您不要將用戶名提供給客戶端。 您可以將其存儲在會話變量中嗎?

如果使用此user_id檢索與登錄用戶有關的一些機密信息,那么這聽起來像是安全漏洞。

您應該從會話變量獲取user_id

我認為將“ user_id”放入客戶端HTML並發送回服務器不是一個好主意。 您需要對從客戶端發送的數據進行更多驗證(進行一些檢查和過濾)。

我建議使用會話而不是將其發送給客戶端,但是如果同時編輯兩個或多個數據(多選項卡),則會遇到問題,因此您需要使用會話和一些技巧。

在此示例中,您的真實user_id將永遠不會發送到客戶端。

index.php:

session_start();
$edit_session_id = md5(uniqid() . microtime(true));

$_SESSION['edit_' . $edit_session_id] = $user_id;

ajax.js:

var edit_session_id = $('#edit_session_id').val();

$.ajax({
    url     : "process.php",
    method  : "POST",
    data    : {'edit_session_id' : edit_session_id},
    cache   : false,
    success : function(data) {
          // do code
    }
);

process.php:

session_start();

$edit_session_id = $_POST['edit_session_id'];
if(!isset($_SESSION['edit_' . $edit_session_id]))
{
    die('Invalid edit session, please go back & refresh');
}
$user_id    = $_SESSION['edit_' . $edit_session_id];

// Do something with user_id

//Clear the editing session
unset($_SESSION['edit_' . $edit_session_id]);

您應該使用POST而不是GET,還應該使用ssl,以便使用https而不是http來發送url。現在您已經足夠安全了,但是可以通過添加額外的加密層來提高安全性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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