1

我正在制作类似 AJAX 的功能,但我遇到的问题是不良用户可以将值更改为任何其他当前用户。那么,我该如何防止这件事呢?

$live = 'user1';
$fol = 'user2';

function ajax(like){
    var data = 'like='+like+'&CURRENTUSER=<?php echo $live; ?>&TOFOLLOW=<?php echo $fol; ?>';
    $.ajax( {
        type: 'POST',
        url: 'ajax.php',
        data: data,
        success: function(e) {
            $('#success').html(e);
        }
    });
}

此外,我想将此 ajax 函数移动到ajax.js文件中,但我在获取用户的值$live和值时遇到问题,$fol因为 echo $live 不起作用.js。那么,有没有办法像 Facebook、Twitter 那样做 AJAX 功能呢?

4

3 回答 3

2

我有问题,坏用户可以将值更改为任何其他当前用户。那么,我该如何防止这件事呢?

当然,你根本不能这样做。

HTTP 是一种无状态协议——因此到达您的服务器的每个请求都是不可信的。

您必须检查服务器端请求的客户端是否有权请求/执行他想要触发的任何操作 - fe 通过检查作为“当前”用户传递的用户 ID 与您存储登录名的会话信息。(因此,当您将当前用户的 id 存储在其中时,就无需再从客户端实际发送它了。)

这是任何 Web 应用程序最基本的安全原则之一——不要信任任何传入的请求,直到您验证客户端具有适当的授权。因此,询问如何“隐藏”从客户端发送的任何数据是完全错误的问题——这将是所谓的“隐匿安全”,这是行不通的

于 2013-09-08T12:34:59.550 回答
2

此解决方案适用于 apache 网络服务器。要使用 php 解释 JS 文件,请将此行添加到您的.htaccess文件中:

 AddType application/x-httpd-php .js

并将您的脚本放入ajax.js. 另一种方法是使用重写 URL:

 RewriteEngine On
 RewriteRule  ^ajax.js$    ajax.js.php  [L]

并将您的脚本放入ajax.js.php文件中。当然,所有这些都是如果您想将您的 URL 显示为 JS 文件。

在你的ajax.jsajax.js.php文件的顶部,在任何类型的输出之前,把这个:

header('Content-Type: application/javascript');
于 2013-09-08T12:04:29.250 回答
1

这种问题可以有很多解决方案。

  1. 在页面加载之前在会话中添加关注用户之一,这样即使您不需要在 ajax 中发送数据。只需要确认操作,所有数据将从会话中获取。因此黑客无法修改用户。(这就是我在项目中解决问题的方法)

  2. 您可以构建一个类似encode() & decode() 的函数。当您首先在文件 encode() 中使用数据时。然后在代码端使用 decode() 来提取信息。因为如果出现无效数据意味着有人已经缓和,您将不会执行该操作。但是你必须自己创建这样的 encode() & decode() 。

    $live = encode(user1);
    

在 php 结束时

   $real_live = decode($live);

3. Ajax 请求启动 php 执行时你可以有一个类似的函数

    check_auth(user1,user2);

因此,即使有人使用了不良数据,您的安全规则也可以过滤它们。

希望您可以使用其中的任何一个。

于 2013-09-08T12:41:54.643 回答