代码之家  ›  专栏  ›  技术社区  ›  ueen

将字符串安全地传递给JS

  •  1
  • ueen  · 技术社区  · 7 年前

    如何在JS中接收字符串(可能通过警报),而不让用户事先看到它(例如在源代码中)? 您可能从Geocaching Checkers了解到了这一点,他们如何确保真正的坐标不会出现在源代码中或任何地方? 我有一个网络服务器和一些基本的JS和HTML理解,我读了关于PHP和AJAX,但我还没有找到解决我的问题的方法。 我尝试使用单独的PHP文件:

    <?php
        $koords =  "N 53° 13.869 E 10° 22.716";
    ?>

    但是我如何在JS中接收这个变量,用户能看到php文件吗?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Christian S.    7 年前

    你唯一能做的就是设置一个服务器来评估你的用户是否满足了完成挑战的条件。一旦服务器识别出挑战已完成,它就会发回您的请求 客户端,以便可以在那里向用户显示。如何设置服务器以及使用何种语言或框架/工具(例如PHP)取决于您的背景和网站的宿主环境。

    添加一点细节:您需要在JS中发出一个Http请求,以某种方式将用户输入发送到服务器(例如PHP)。如果它是简单的内容,你可以将它添加到url中 &parameter=foo

        2
  •  0
  •   ueen    7 年前

    好吧,这就是我所做的,帮助任何看到这个的人。 这个方法很容易被“破解”,所以不要用它来隐藏实际的敏感数据,它更容易在源代码中看到正在发生的事情。

    <?php
    
    $secret =  "data";
    $givesecret = $_GET['givesecret'];
    
    if ($givesecret>0) {
        echo $secret;
    }
    ?>

    然后,当我需要秘密信息时,我让我的JS通过XHR调用PHP

    var rndvar = 0;
    //something is done in a loop
    rndvar++;
    //now something is completed and i want to reveal the secret
    var xhr = new XMLHttpRequest();
                xhr.open("GET", "containssecret.php?givesecret="+rndvar);
                xhr.onreadystatechange = function()
                {
                    if(xhr.readyState == 4 && xhr.status == 200) {
                        alert(xhr.responseText);
                    }
                }
    xhr.send();

    很基本,明显的缺陷是,当然,我可以打电话 https://www.mywebsite.org/containssecret.php?givesecret=5 但是,如果你知道一些编码,你总是有可能发现,这只是一种简单的混淆方法,而且对普通用户来说是相对安全的。就我而言,这已经足够了