1

我如何在 JS 中接收一个字符串(可能通过警报),而用户无法事先看到它(例如在源代码中)?您可能从 Geocaching Checkers 中知道这一点,它们如何确保真实坐标不被在源代码或任何地方看到?我有一个 Web 服务器和一些基本的 JS 和 HTML 理解,我阅读了 PHP 和 AJAX,但我还没有找到解决我的问题的方法。我的目标是仅当用户在我的网站上完成一个条件时才显示信息,并且它以前从未见过它至关重要。我尝试使用单独的 PHP 文件:

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

但是我如何在 JS 中接收这个变量并且用户可以看到 php 文件?

4

2 回答 2

2

在您的浏览器 (JS) 中,具有 JS 知识的人始终可以看到它。

您唯一能做的就是设置一个服务器来评估您的用户是否满足完成挑战的条件。一旦服务器识别出挑战已完成,它会将您的秘密发送回客户端,以便在那里向用户显示。您如何设置该服务器以及使用什么语言或框架/工具(例如 PHP)取决于您的背景和您将在其中托管您的网站的环境。

添加一些细节:您将希望在您的 JS 中发出一个 Http 请求,以某种方式将用户输入发送到服务器(例如 PHP)。如果它是简单的内容,您可以将其添加到 url 本身中&parameter=foo,否则您可能会发送一个发布请求并将您的数据作为 JSON 正文发送。然后,您需要评估您的 PHP 中的参数,如果它满足挑战的要求,您将在您的响应中使用您的秘密或不使用类似重试的消息来回答客户端。

于 2018-08-30T17:11:49.363 回答
0

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

<?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它会立即给出秘密,所以目标是减少所有内容很明显,并不清楚 PHP 中的标准是什么(这里它是 int 大于零)。但总有可能发现,如果你知道一些编码,这只是一种容易混淆的方法,而且对于普通用户来说它只是相对安全。就我的目的而言,这已经足够了:-D

于 2018-08-31T10:13:00.933 回答