今天学校不知道哪搞了个平台,让我们去上面做模拟实验,我点开一看,好嘛,没啥用的机器人、电焊,继续看下去还有题目,又懒得上网查答案,但是学校给的通知里有一行话引起了我的注意:

温馨提示:需要从实验空间进入实验,不可直接输入网址进入

不可直接输入网址?我仔细看了下,发现实验空间的作用就是添加一个 token,如果直接进去就是游客,没有办法登录。

这下就好办了啊,虽然是游客,但是游客也可以做题啊,我用游客帐号先做了不就拿到答案了吗?

这个系统果然把正确答案显示在前端了,但是不太好看,于是我就跑去 F12 看了。

结果我在后台找到了下面的代码:

$.ajax({
		url: "/webApi/experimen/rig/getData",
		type: "GET",
		data: { courseId: courseId },
		dataType: "JSON",
		success: function (res) {

        // 省略的大量代码逻辑

        })

下面的注释是原来就有,不是我加的。
对,这个系统没有对 js 做混淆甚至在代码里有详细的注释。

// 单选
var answer = $('.afterTesting .topic1 form');
for (var k = 0; k < answer.length; k++) {
    var question1 = $(answer[k]).find(".question1");
    var questionAnswer = question1.attr("data-answer");
    var userAnswer = question1.find("input[type='radio']:checked").val();
    var score = parseFloat(question1.attr("data-score"));
    if (questionAnswer.length > 1) {
        var userdAnswer = question1.find("input[type='checkbox']:checked");
        let userdAnswerStr = '';
        for (let i = 0; i < userdAnswer.length; i++) {
        userdAnswerStr += $(userdAnswer[i]).val();
        //console.log($(userdAnswer[i]).val());
        }
        //console.log(userdAnswerStr);
        userAnswer = userdAnswerStr
    }
    var isok = "";
    if (questionAnswer == userAnswer) {
        isok = "正确";
        question1.find(".countItem span").html(score);
        resultafter += score
    } else {
        isok = "错误";
        question1.find(".countItem span").html("0");
	}
	question1.find(".yourAnswer span").html(isok);
}

好家伙,前端直接向后台发请求拿答案数据,然后判断对错?这就好比考试的时候老师把答案和试卷都给你,让你自己写完试卷自己评分。

直接发一个请求过去,果然拿到答案了。

数据示例:

{
    "id": "570239720236388352",
    "courseId": null,
    "title": "07、机器人的运动速度与摇杆的偏转量 ()",
    "optionA": "A、正比             ",
    "optionB": "B、反比 ",
    "optionC": "C、不成比例         ",
    "optionD": "D、以上均不正确",
    "optionE": "",
    "optionF": "",
    "optionG": "",
    "optionH": "",
    "answer": "A",
    "tag": "",
    "analysis": "",
    "remarks": "",
    "content": "",
    "score": 3.0,
    "pid": "550581359601651712_before",
    "countOfRow": null
}