load()函数安全问题

时间:2011-01-27 14:43:15

标签: php jquery

我在我的网站上使用load()jquery函数,传递用户,id,name等变量......

$('#DIV').load(page.php?id=' + id + '&user=' + user);

在加载的page.php上使用它。

  if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) 
    && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') 
       { ...whatever...} else { ...the_other... }

似乎没问题,我的问题是,如果你用firebug检查页面...并修改jquery加载函数中的变量,你可以代表其他用户行事。

我可以阻止这种情况发生吗?

3 个答案:

答案 0 :(得分:3)

您需要检查用户是否已在服务器端登录。

实施例: 的的login.php

session_start();
$_SESSION['user'] = 'User ID goes here';

无论您需要检查用户是否是他所说的人

<强>安全(ISH).PHP

session_start();
if($_SESSION['user'] == 'User ID goes here')
{
    //code
}

有关会话的详细信息,请参阅PHP documentation

答案 1 :(得分:0)

您只能通过修改发送到服务器的信息,无法为其他用户执行操作。您需要做的是以某种方式验证每个请求的使用情况。可能有一个令牌或cookie需要与每个请求一起发送到服务器?

用户的定义是什么?您是如何验证这些用户的?你在使用cookies或会话吗?在代码中的某处,您需要确保经过身份验证的用户可以访问所请求的信息。根据您对用户进行身份验证的方式,您的代码最终可能会出现以下情况:

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) 
    && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') 
       { ...whatever...} else { ...the_other... }

或者更好的是,为什么要实际发送哪些用于服务器呢?而不是使用GET变量,为什么不采用以下方法:

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) 
    && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') 
       { //instead of getting user info with $_GET, get it with $_COOKIE or $_SESSION }

答案 2 :(得分:0)

您将需要执行某种形式的检查服务器端(可能使用cookie,会话变量或两者)。某些东西,以便当服务器看到请求时,它可以说“用户ID匹配”,或“不,它不匹配”。

一旦你完成了这个,用户参数将没有实际意义,所以你不必担心欺骗,因为你已经能够事先确认它们。