【问题标题】:How to send data between ajax and php in secure way?如何以安全的方式在 ajax 和 php 之间发送数据?
【发布时间】:2013-04-30 14:09:12
【问题描述】:

我有 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 文件收到的用户 ID:

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

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

【问题讨论】:

  • 安全方面的哪些方面需要改进——针对谁的安全?用户?第三方?
  • 这个网站是replete with information,关于创建安全的 AJAX 交易。您是否有尚未涵盖的特定问题?
  • 我的意思是可能喜欢加密发送数据,因为它可以在发送时被某人更改
  • 这里有一些有用的信息:stackoverflow.com/questions/1012777/…
  • @M8R-1jmw5r 感谢您的通知。顺便说一句,这是我的第一个问题,我同意我的问题不太正确的事实。下次我会更具体。

标签: php javascript jquery ajax security


【解决方案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
}

【讨论】:

  • 这不会增加安全性!更改编码不会使任何事情更安全。
  • @MartinSamson 有什么建议吗?
  • 如果您要发送敏感数据,HTTPS 是事实上的标准。
【解决方案2】:

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

【讨论】:

  • 我正在考虑这个问题,但问题是我也使用锚导航,所以我打开第二个文件,这个 INDEX.PHP 和在第二个 php 文件中我无法启动会话(),它给出了错误:(
【解决方案3】:

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

您应该从会话变量中获取 user_id

【讨论】:

    【解决方案4】:

    我认为将“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]);
    

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-25
        • 2013-01-11
        • 1970-01-01
        • 2014-04-27
        • 1970-01-01
        • 1970-01-01
        • 2016-01-06
        • 2016-05-27
        相关资源
        最近更新 更多