2013-04-30 33 views
0

的index.phpajax.jsprocess.php(在那裏我得到我的AJAX數據)。如何以安全的方式在ajax和php之間發送數據?

我使用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" 
    } 
); 

USER_ID我從PHP文件獲得:

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

我需要什麼,以增加安全性呢?

+4

使用TLS(https)。 – Pointy 2013-04-30 14:10:09

+4

想要完全提高安全性的哪個方面 - 針對誰的安全性?用戶?第三方? – 2013-04-30 14:10:26

+2

這個網站是[充滿信息](http://stackoverflow.com/search?q=secure+ajax)關於創建安全的AJAX交易。你有沒有涉及的具體問題? – 2013-04-30 14:12:36

回答

0

我建議你不要向用戶提供用戶標識。你可以將它存儲在會話變量中嗎?

+0

我在想,但問題是,我也使用錨定導航,所以我打開第二個文件它這個INDEX.PHP和在這第二個PHP文件我不能startsession(),它會給出錯誤:( – frenchthebread 2013-04-30 14:22:49

0

如果user_id是被用來獲取這聽起來像一個安全漏洞相關的登錄用戶,然後一些機密信息。

你應該從變量

1

下面就可以添加,只是爲了提高安全性的措施會越來越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 
} 
+2

這不會增加安全性!更改編碼並沒有提高任何安全性 – 2013-04-30 14:34:23

+0

@MartinSamson有什麼建議嗎? – 6339 2013-07-08 11:47:26

+0

如果您發送敏感數據,HTTPS是事實上的標準。 – 2013-07-08 15:33:35

0

我認爲不是一個好主意,把'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]); 
0

您應該使用POST研究所ead of GET,你也應該使用ssl,這樣你的url就可以用https而不是http.Now獲得足夠的安全保護,但你可以通過增加額外的加密層來提高安全性。