javascript,看一段,求问它具体意思!大概意思我知道,但出题人要求从中找出密码……

如题所述

这是我通过研究以后得出的结果。

首先查看网页的源代码,发现提交是通过一个表单来执行的

<form method="post" action="check.php" onsubmit="return chk_submit();">
    <span class="icon key_icon"></span>
    <input type="password" name="password" id="password" class="txtbox pwdbox radius" required="true" title="请填写通关密码" />
    <input type="hidden" name="reakey" value="the cnss">
    <input type="submit" name="submit" id="submit" class="enter_btn"  value="提交" />
</form>

先吐槽一下写这个代码的人HTML水平有待提高--,上面是精简后的代码,意思是将这个表单提交到check.php网页,直接访问这个网页会得到提示please check the the key you submit

但是发现无论输入什么文本,点提交都提示JS又傲娇了呢(推测是个伪娘。。。)

也就是楼主发的图中的JS,这段代码无论怎么执行都返回一个false,所以表单提交永远不成功。作者估计是想考查怎么绕过JS验证直接到服务器端,也就是所谓的安全漏洞。

我用firefox浏览器+firebug插件,首先打开控制台,运行以下脚本让那段验证脚本失效:

var chk_submit = function() {
    return true;
};

意思就是再重新定义一个同名函数来覆盖上面的函数让其失效(JS中没有函数重载),这样这个函数就永远返回true了,这时点提交就能把表单的内容提交到check.php这个页面了。

但是这时check.php还是输出提示please check the the key you submit,应该是这个页面做了特殊字符的匹配验证,只有接收到指定的字符串才能通过,返回来再看表单中的代码,发现有一个隐藏域:

<input type="hidden" name="reakey" value="the cnss">

value属性里面的值是the cnss,我猜这个就是特殊的字符,将这一段字符在上面让chk_sumit失效的情况下提交,就得到了开始截图上的密码。

追问

控制台怎么能定义新函数使覆盖呢?是必须下firebug和火狐浏览器么?用别的浏览器能不能实现?

追答

可以用chrome、safari、opera、IE8+,这些浏览器都自带有web开发工具,按下F12就出来了。也不一定要通过控制台来改,可以把这个网页保存到本地,把chk_sumit里面的内容直接改成返回true
或者去掉表单提交中的onsubmit属性。
火狐浏览器装了firebug插件后也是按F12,点击控制台选项,一般在右侧可以看到一个可以输入的区域,在这个地方输入脚本然后点下面的运行就可以了

还有个更直接的方法,把页面的脚本禁用,输入文字直接点提交就行了

温馨提示:答案为网友推荐,仅供参考
相似回答