是否可以制作安全的JS脚本或函数?

时间:2012-07-19 13:56:04

标签: php javascript ajax security

是否可以在Web应用程序中安装一段安全的Javascript代码?通过 secure 我的意思是我们可以执行诸如查询服务器的权限以及执行客户端无法更改的操作之类的操作?

示例:

    var flag = 0;

    $.ajax({
        async: false,
        url: "/check_permission_script.php",
        success: function(data){
            flag = parseInt(data);
        }
    });

    if (flag != 1){
        display_normal_content();
    }else{
        display_secure_content();
    }

在这里,我想向服务器发出查询,以检查用户是否有权查看安全内容。如果他们拥有权限,我们会使用display_secure_content()向他们展示安全内容,否则,我们会使用display_normal_content()来显示正常内容。问题是,通过调试终端,可以很容易地在客户端计算机上设置flag变量== 1,或者直接调用display_secure_content()函数。

我这样做的动机是拥有一个漂亮的网络应用程序,它使用ajax来获取新内容,而无需重新加载页面。我喜欢这个而不必重新加载页面。

所以问题是,我们可以使用安全的JS脚本来防止客户端操作吗?或者,根据网络基础设施的性质,这根本不可能吗?

谢谢!

5 个答案:

答案 0 :(得分:2)

根据JavaScript的本质,这是不可能的。

客户端无法看到的任何内容都无法发送给客户端。所有身份验证/授权都应该在服务器端进行。

您仍然可以使用AJAX在您的界面中加载数据,但请确保在服务器端进行检查以防止敏感数据泄露。

答案 1 :(得分:1)

简短的回答,不 - 不仅仅是JavaScript。 JavaScript在客户端执行,因此您放入其中的任何内容都是可访问的,并且可由客户端修改。

有一些工具可以帮助“隐藏安全”,例如混淆代码,但这对您的最终目标没有帮助。

根据您当前的设置,有什么可以帮助您通过Ajax联系服务器端PHP页面,该页面处理所有安全性/验证并返回要显示的内容。这样做,面向客户端的JavaScript只能“请求”,而不是验证或选择要显示的内容。

答案 2 :(得分:1)

您可以针对内部数据库查询会话ID,并返回一个安全的公钥/私钥加密令牌,其中包含用于解密数据blob的密钥。然后使用它作为javascript函数的参数,该函数使用此返回的密钥来解密blob。

此解决方案不需要重新加载页面,虽然它在理论上有效,但您必须返回每次使用不同密钥加密的安全内容的页面。我不建议实际尝试这个。

答案 3 :(得分:1)

服务器应该知道用户可以看到和看不到的内容。如果在客户端上更改了标志,则服务器不应该信任它,它应该在获取请求时进行验证。安全101的东西

答案 4 :(得分:0)

JavaScript是一种客户端脚本语言。这意味着这样。

如果您需要安全脚本,请使用PHP。