显示以下JS代码的密码

Reveal a password for the following JS code

本文关键字:密码 代码 JS 显示      更新时间:2023-09-26

我在一次面试中得到了这个,但我不知道答案。。。我收到了一个运行JS的HTML文件,我需要找到密码。

当我运行HTML文件时,我得到了除了"Good job"或"Too bad"字符串之外的所有内容。我发现可能有一个隐藏的代码覆盖了这个代码(我这么认为是因为我在这个HTML文件中找不到这样的字符串)。

不管怎样。。。我从原始文件中复制了代码,并将其保存为一个新的HTML,然后我得到了"太糟糕了",而不是隐藏代码的奇怪消息。

如果有人能向我解释下面的代码,并告诉我他是如何透露正确密码的,我会非常高兴。

谢谢!!

代码:

<script type="text/javascript">
function c(x){ alert((document.getElementsByTagName('input')[0].value == window.location.hostname.replace(/a-f/, '%')) ? 'Good job!' : 'Too bad!'); }
</script>
Password: <input /><br />
<button onclick="c()">Check</button>

我将HTML文件上载到:http://www.filedropper.com/secretpass

document.getElementsByTagName('input')[0].value == window.location.hostname.replace(/a-f/, '%')

此代码将输入的值与从URL主机名派生的字符串进行比较。

它被用作显示消息的条件运算符的比较器。

我相信密码将取决于托管此脚本的网站。c函数查看window.location.hostname(例如www.google.com),并将a、b、c、d、e或f的第一次出现替换为百分号"%"。我认为百分比符号在JS regex表示法中没有任何意义,所以如果脚本托管在www.yahoo.com

上,密码将是www.y%hoo.com

这个小提琴展示了事物的行为。我添加了一个附加功能,它只显示期望的密码。在这种情况下,预期的密码是fiddle.jshell.net,因为它是生成文档所在框架的主机。

因此,是的,密码是直接从网页的URL派生而来的。如果它只是本地机器上的一个HTML文件,就像上面提到的那样,它的URL就像

file:///C:/Users/yourname/Desktop/jobtest.html

地址栏上显示的都是。然而,我怀疑它是否如此简单,因为对于在file:// URL上运行的网页,我们有

window.location.hostname == ""

这意味着密码只是一个空字符串。因此,您可以将输入字段留空,然后单击按钮。如果您在本地服务器上运行它,它可能会工作,在这种情况下,密码将是localhost,正如@Chris所提到的。

但我也怀疑您复制的代码可能有点错误。也许不是,也许这只是一个欺骗,但replace()函数中的正则表达式似乎是错误的。代替

`window.location.hostname.replace(/a-f/, '%')`

我希望

`window.location.hostname.replace(/[a-f]/, '%')`

其将用%替换第一小写abcdef。所以你应该有lo%alhost而不是localhost

无论如何,从您的问题来看,密码只是URL的主机名部分,a-f的第一个实例被%替换。因此,您将使用www.zeld%orever.com而不是www.zelda-forever.com