2013-04-30 50 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获得足够的安全保护,但你可以通过增加额外的加密层来提高安全性。