隐藏ajax上的var数据

时间:2013-09-08 11:42:48

标签: php javascript jquery ajax

我正在制作类似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功能呢?

3 个答案:

答案 0 :(得分:2)

此解决方案适用于apache web-server。要使用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');

答案 1 :(得分:2)

  

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

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

HTTP是无状态协议 - 因此到达您服务器的每个请求都是不信任,期间。

您必须检查服务器端是否有权请求客户端请求/执行他想要触发的任何操作 - f.e.通过检查作为“当前”用户传递的用户标识,对照您存储登录信息的会话。 (因此,如果当前用户的id存储在那里,那么首先不需要从客户端实际发送它。)

这是任何Web应用程序的最基本安全原则之一 - 在您验证客户端具有相应授权之前,不要信任任何传入请求。因此,询问如何“隐藏”从客户端发送的任何数据完全是错误的问题 - 这就是所谓的“默默无闻”,而无法正常工作

答案 2 :(得分:1)

对于这样的问题可以有很多解决方案。

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

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

    $live = encode(user1);
    
  3. 在php结束时

       $real_live = decode($live);
    

    3。启动php执行时的Ajax请求你可以拥有像

    这样的函数
        check_auth(user1,user2);
    

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

    希望你能使用其中任何一种。