我正在制作类似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功能呢?
答案 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.js
或ajax.js.php
文件的顶部,在任何类型的输出之前,请输入:
header('Content-Type: application/javascript');
答案 1 :(得分:2)
我有一个问题,即坏用户可以将值更改为任何其他当前用户。那么,我该如何防止这件事?
当然,你根本不能这样做。
HTTP是无状态协议 - 因此到达您服务器的每个请求都是不信任,期间。
您必须检查服务器端是否有权请求客户端请求/执行他想要触发的任何操作 - f.e.通过检查作为“当前”用户传递的用户标识,对照您存储登录信息的会话。 (因此,如果当前用户的id存储在那里,那么首先不需要从客户端实际发送它。)
这是任何Web应用程序的最基本安全原则之一 - 在您验证客户端具有相应授权之前,不要信任任何传入请求。因此,询问如何“隐藏”从客户端发送的任何数据完全是错误的问题 - 这就是所谓的“默默无闻”,而无法正常工作。
答案 2 :(得分:1)
对于这样的问题可以有很多解决方案。
在页面加载之前在会话中添加一个关注用户,这样即使您不需要在ajax中发送数据。只需要确认操作,所有数据都将从会话中获取。因此,黑客无法修改用户。(这就是我在项目中解决问题的方法)
你可以构建一个像encode()&amp; amp;解码()。当你首先在文件encode()中使用数据时。然后在代码结束时使用decode()来提取信息。因为如果出现无效数据意味着某人已经缓和,你将不会执行该操作。但是你必须创建这样的encode()&amp;解码()你自己。
$live = encode(user1);
在php结束时
$real_live = decode($live);
3。启动php执行时的Ajax请求你可以拥有像
这样的函数 check_auth(user1,user2);
因此,即使有人使用了错误数据,您的安全规则也可以过滤它们。
希望你能使用其中任何一种。