如何以安全的方式在ajax和php之间发送数据?

时间:2013-04-30 14:09:13

标签: php javascript jquery ajax security

我有 index.php ajax.js process.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" />

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

5 个答案:

答案 0 :(得分:1)

可以添加以下内容,仅用于增加安全措施,

在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
}

答案 1 :(得分:0)

我建议您不要将userid提供给客户端。您可以将其存储在会话变量中吗?

答案 2 :(得分:0)

如果此user_id用于检索与登录用户相关的某些机密信息,那么这听起来像是一个安全漏洞。

您应该从会话变量

获取user_id

答案 3 :(得分:0)

我认为将&#39; user_id&#39;放在一起并不是一个好主意。在客户端HTML中并发送回服务器。您需要对从客户端发送的数据进行更多验证(进行一些检查和过滤)。

我建议使用session而不是将其发送到客户端,但如果同时编辑两个或多个数据(多选项卡),则会遇到问题,所以你需要使用session和一些技巧。

通过此示例,您的真实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]);

答案 4 :(得分:0)

您应该使用POST而不是GET,并且您还应该使用ssl,以便yuor使用https而不是http来保持sart。现在您已足够安全,但您可以通过添加额外的加密层来提高安全性。