好吧,让我先说一下我的编程经验很少,所以如果我的解释掩盖了一些严重的无知,我会道歉。我一直想学习某些技巧,但我找不到任何教程。
这是交易:
有一个网站可以为您提供各种科学问题并对输入进行评分。对于每个问题,都有一个名为“练习其他版本”的按钮,它会生成一个弹出框,其中包含一个新的相似版本的问题。这个新版本还有一个名为“显示答案”的按钮,显然可以显示解决方案。
我使用FireBug查找Show Answer按钮的代码:
<input type="submit" onclick="key('0','1')" style="border: 1px solid rgb(51, 102, 153); margin-left: 1%;" value="Show Answer" name="Key">
我查看了FireBug的“DOM”标签,查看了关键功能的内部代码:
function key(pos, showAnsFlag) {
setYpos();
if (showAnsFlag == 1) {
document.forms[0].showAnswer.value = 1;
document.forms[0].hideAnswer.value = 0;
} else {
document.forms[0].hideAnswer.value = 1;
document.forms[0].showAnswer.value = 0;
}
document.forms[0].pos.value = "";
document.forms[0].keypos.value = pos;
document.forms[0].randpos.value = "";
document.forms[0].solpos.value = "";
document.forms[0].subaction.value = "key";
}
点击“显示解决方案”后,我还查看了Firebug的Net选项卡以发现POST参数:
Key Show Answer
RC_821796_0_0_821813 mc //[These are the names of the problems]
RC_821796_0_0_821813 1
RC_821796_0_1_821813 mc
RC_821796_0_1_821813 0
UserPass //[ERASED, because I'm not sure if it can be used maliciously]
feedback0 rmh
hideAnswer 0
hideSolution
keypos 0
pos
randpos
showAnswer 1
showSolution
solpos
struct CuDMAcAACEAuEuEaANErASAJANBPBjDABkCiAaAxAEEfAjCgAvAjDjDQCTDTCbBjAUBtDXDXBqEXAFAjEPAVEMESvVBVzUCcEwALAMCSBQDewWDTAPBUEBCeArESCmDWAfErAXETBFEoBDCEDxBODlCbAeEnCNEKDmDgBHAJESEKATDmAoEFAdCUALCiCLBXCcDFATAcDRDoCwERuUBTDKEkBKESCXATAbDRAwBYEFAeDREWDBCdCeElBJCPCSDtAeABBxDwDDByEPAwEVAtAoDADWCkCCBBAwDNCyEECEAlCeACDCAPCmAsDM
subaction key
ypos 196
好吧,当我“练习另一个版本”时,页面上就会出现这种情况。我的想法是,当我在普通页面而不是“显示另一个版本”页面时,我想调用“键”功能(或者至少是一个与它完全相同的功能)。问题是,当我检查普通页面的DOM时,它甚至没有可访问的密钥功能。
有没有办法在页面中注入javascript来强制调用key函数?最理想的情况是,有一个书签可以循环遍历所有问题,调用关键功能,并显示答案。
鉴于我缺乏知识,我不知道该尝试什么。我尝试过这样简单的事情(在地址栏中)
javascript:document.forms[0].showAnswer.value = 1;
而且我知道它有所作为,因为当我输入
时 javascript:alert(document.forms[0].showAnswer.value);
它提示“1”,但我不确定它到底在做什么,或者我还有什么要做。
修改
让我试着澄清一下 - 我不拥有该网站,所以我正在尝试做一些客户端的javascript工作来操纵网站做我想做的事(请注意,我甚至不确定这是可能的。)
在网站的一个部分,在名为“practice.tpl”的页面中,它允许我按下一个名为“显示答案”的按钮(该按钮调用上述键功能并显示解决方案)。
但是,在另一个页面上,按钮和功能不存在。所以我想知道我是否能以某种方式借用practice.tpl页面中的key函数,并将其注入另一个页面。
修改2
这是两个页面的源代码:
主页面(我试图注入代码的那一页) http://pastebin.com/r7KVMU1N
“额外问题”页面(关键功能所在的页面) http://pastebin.com/D8Nc6fbk
答案 0 :(得分:1)
在进一步检查时,这可能无法实现,关键值似乎被锁定在网站遍布各处的struct
参数中。
不过,您可以尝试这种可行性测试。需要带Firebug的Firefox。
登录家庭作业部分。
右键单击灰色问题边框左侧的空白区域。
应选择问题分组,例如<div id="question3" class="waQBox container">
。如果没有,请在Firebug的HTML选项卡中选择最近的一个。
按下Edit
按钮。
将所有代码复制并粘贴到任何带搜索功能的文本编辑器中。
搜索“Submit New Answers To
”。
找到的行应包含以下文字:return submit_this('{BIG HONKING STRING}',true
复制BIG HONKING STRING的值,马上就需要它。
搜索UserPass=
。复制=
和'
之间的值。
回到Firebug;滚动到编辑框的底部;并粘贴在下面的代码中,恰好位于第三个</div>
之上。
在新粘贴的块中,将struct
输入的值替换为步骤7中的BIG HONKING STRING。
在新粘贴的块中,将UserPass
输入的值替换为步骤8中的字符串。
按下Edit
按钮(编辑完成)。
现在,在页面上,按下新的Show Answer
按钮。
会发生什么?网站如何响应确定是否可以使用GM脚本。
<form enctype="x-www-form-urlencoded" action="/v4cgi/student/practice.tpl" name="practice" id="practice" method="post">
<!-- ***** Javascript REQUIRED to copy current UserPass value.
-->
<input type="hidden" value="ceeb69f9b47e5660110d5ab7e27ba168" id="UserPass" name="UserPass">
<input id="struct" name="struct" type="hidden" value="AYCJDoEaCWEbEVErBsBKAbBeDJEEDUBYDEDcDrEhCCBXAkEgBoExDGCDCxBODKBAAWAhAtDIAgCOAQAHACClAnCiCHCMBbEECLBICgBVALCHEhzUCxAxCrzZBPEHEiBSASDfCRCKCFBxDKCCBKCNvVCWBSBbAIAlDVCnBEEkAkBlBuCAEKCLDMDpAHBqCsCcEdAlBiDfCjErAUBTDmEoDqAcEVCfAyBPEJAeABBSEoEpDdEEwWDjCiCNAaESABCdEkDABKDoEuCvAOCRCLCFDfDeClBmAdAuAhELDeEoEnCNBoCOBgAFBfAr">
<input type="hidden" value="key" id="subaction" name="subaction">
<input type="hidden" value="" id="pos" name="pos">
<input type="hidden" value="0" id="keypos" name="keypos">
<input type="hidden" value="" id="randpos" name="randpos">
<input type="hidden" value="" id="solpos" name="solpos">
<!-- ***** Javascript desired. "7" to window.pageYOffset
-->
<input type="hidden" value="7" id="ypos" name="ypos">
<input type="hidden" value="1" id="showAnswer" name="showAnswer">
<input type="hidden" value="0" id="hideAnswer" name="hideAnswer">
<input type="hidden" value="" id="showSolution" name="showSolution">
<input type="hidden" value="" id="hideSolution" name="hideSolution">
<input type="hidden" value="r" id="feedback0" name="feedback0">
<!-- ***** If this value is required, then the whole process may be very difficult.
But it's probably not.
-->
<input type="text" id="RN_821703_0_0_821745" name="RN_821703_0_0_821745" value="">
<input type="submit" value="Show Answer" name="Key">
</form>