在Ajax请求中发送安全参数的最佳方法是什么?

时间:2015-04-07 06:42:49

标签: javascript php jquery code-injection

我使用此函数发送ajax请求:

function myFunc(x)
{
    $.ajax({
        url: retrive.php,
        type:     'POST',
        data:     'data=' + x,
        success:  callback
    });
}

我用整数参数调用该函数。例如:

myFunc(20);
myFunc(25);

黑客可以更改myFunc()的参数吗?
如果他可以,如何防止改变价值?
发送安全参数的最佳方法是什么?

** 编辑: **

我的javascript代码有一个名为Score的变量 此变量加1:

if(condition)
{
    Score++;
}

游戏结束后,我用Ajax发送变量 这个带有游戏代码的变量存储在数据库中。

if(game_over)
{
    myFunc(20, Score); // game code, score
}

但是这个值可以由用户改变。(通过铬和萤火虫控制台)
1.解决方案是什么?
2.这种攻击的名称是什么?是Xss吗?

3 个答案:

答案 0 :(得分:3)

是的,黑客肯定可以,也很容易。例如,通过使用Chrome开发人员工具,您可以注入或修改脚本。作为一个激励性的例子,当我订购比萨饼时,我经常这样做,以便更快地送货;)

因此,您不应该依赖JavaScript身份验证。相反,让您的服务器验证或拒绝参数,或在服务器和JavaScript之间使用某种挑战/接受系统。

您可以尝试以下更多提示:Ajax post request security

答案 1 :(得分:2)

  

黑客可以更改myFunc()的参数吗?

是的,他可以。

  

如果他可以,如何防止改变价值?

您无法阻止它,但您可以验证服务器端代码中的参数。

  

发送安全参数的最佳方法是什么?

您可以使用mcrypt_encrypt()函数加密字符串或数据,在接收数据时可以使用mcrypt-decrypt()函数,您可以使用PHP的其他编码方式

您可以查看PHP mcrypt - Complete encryption and decryption of data

答案 2 :(得分:1)

与通过POST或HTML形式的GET发送参数相同。 它不可能保护它。 您只能使用某种加密方法,但是它的安全性不是很高,因为在服务器端需要解密它。在该解决方案的最后,不可能以100%的安全性对其进行加密。