将字符串安全地传递给JS

时间:2018-08-30 16:38:19

标签: javascript string security geocaching

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

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

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

2 个答案:

答案 0 :(得分:2)

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

您唯一可以做的就是设置一个服务器,该服务器评估您的用户是否满足完成挑战的条件。一旦服务器识别出挑战已完成,它将把您的秘密发回给客户端,以便可以在此向用户显示。设置服务器的方式以及使用哪种语言或框架/工具(例如PHP)取决于您的背景和您托管网站的环境。

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

答案 1 :(得分: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