2

是否可以在 Web 应用程序中拥有一段安全的 Javascript 代码?所谓安全,我的意思是我们可以做一些事情,比如查询服务器的权限,做客户端不能改变的操作?

例子:

    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 来获取新内容的优秀 Web 应用程序,而无需重新加载页面。我喜欢这样,而不必重新加载页面。

所以问题是,我们能否拥有能够防止客户端操纵的 JS 脚本?或者这完全是由于 Web 基础设施的性质而无法实现的?

谢谢!!

4

5 回答 5

2

由于 JavaScript 的本质,这是不可能的。

任何您不想被客户看到的东西根本无法发送给客户。所有身份验证/授权都应该发生在服务器端。

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

于 2012-07-19T13:57:58.557 回答
1

简短的回答,不 - 不是单独使用 JavaScript。JavaScript 在客户端执行,因此您放入其中的任何内容都可以被客户端访问并通过扩展进行修改。

有几种工具可以帮助“通过晦涩实现安全”,例如混淆代码,但这对您的最终目标没有帮助。

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

于 2012-07-19T13:59:44.630 回答
1

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

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

于 2012-07-19T14:00:17.930 回答
1

服务器应该知道用户能看到什么和不能看到什么。如果客户端上的标志发生了变化,服务器不应该信任它,它应该在收到请求时进行验证。安全 101 东西

于 2012-07-19T14:01:49.633 回答
0

JavaScript 是一种客户端脚本语言。本来就是这样的。

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

于 2012-07-19T13:58:14.577 回答