0

我有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" />

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

4

5 回答 5

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
}
于 2013-04-30T14:25:01.947 回答
0

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

于 2013-04-30T14:20:16.537 回答
0

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

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

于 2013-04-30T14:20:50.050 回答
0

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

我建议使用会话而不是将其发送给客户端,但是如果同时编辑两个或更多数据(多选项卡)会出现问题,因此您需要使用会话和一些技巧。

有了这个例子,你的真实user_id将永远不会发送给客户。

索引.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
    }
);

进程.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]);
于 2018-01-25T10:38:03.973 回答
0

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

于 2018-01-25T10:44:29.660 回答