javascript - 使用浏览器控制台发送ajax数据

标签 javascript php jquery ajax

我有一个 PHP 测验页面,它通过 ajax 通过名为 answer() 的函数单击答案来发布答案数据,然后如果答案正确也通过 ajax 通过 loadQuestion() 函数加载问题和答案内容。这是我的代码的一部分:

<ul class="choices">
    <li><a href="javascript:void(0);" onclick="answer(this);"><span id="a0"><?php echo $questionDetail['a'.$answerOrder[0]]; ?></span></a></li>
    <li><a href="javascript:void(0);" onclick="answer(this);"><span id="a1"><?php echo $questionDetail['a'.$answerOrder[1]]; ?></span></a></li>
</ul>
<div id="countdown"><div class="saniyeLoading" style="display: none;"></div></div>
<ul>
    <li><a href="javascript:void(0);" onclick="answer(this);"><span id="a2"><?php echo $questionDetail['a'.$answerOrder[2]]; ?></span></a></li>
    <li><a href="javascript:void(0);" onclick="answer(this);"><span id="a3"><?php echo $questionDetail['a'.$answerOrder[3]]; ?></span></a></li>
</ul>
<script type="text/javascript">
function answer(elm){
    countdown.stop();
    var answer = $(elm).text();
    $.ajax({
        type: 'POST',
        url: "/soru",
        data: {act: 'soru', answer: answer},
        success:function (data) {
            if(data == "success"){
                setTimeout(loadQuestion, 300);
            } else {
                location.href = "/yanlis";
            }
        }
    });
}
function loadQuestion() {
    $.ajax({
        type: 'POST',
        url: "/",
        data: {act: 'ysoru'},
        success: function (data) {
            try {
                data = $.parseJSON(data);
                $("#questionDetailQuestion").text(data.questionDetail['question']);
                $("#a0").text(data.questionDetail['a0']);
                $("#a1").text(data.questionDetail['a1']);
                $("#a2").text(data.questionDetail['a2']);
                $("#a3").text(data.questionDetail['a3']);
                $('.saniyeLoading').hide();
                countdown.start();
            } catch (e) {
            }
        }
    });
}
</script>

我的问题是,人们可以通过在浏览器开发人员控制台中编写一个简单的 for 循环来操纵 answer() 函数。像这样:

for(i = 1 ; i <= 4; i ++ ) {
        $.ajax({
            type: 'POST',
            url: "/soru",
            data: {act: 'soru', answer: $('#a' + i).text()},
            success:function (data) {
                if(data == "success"){
                    loadQuestion();
                }
            }
        });
    }

我通过删除 onclick="answer(this);" 并将 answer() 函数替换为 $('.choices a ').click().然后我通过我的 ajax 页面发送事件来验证我的 PHP 页面中是否有点击事件。

这个问题有更好的解决方案吗?我已经尝试过 token ,但问题是当我通过 ajax 加载问题时,我必须将 token 保存在隐藏的输入等中,他们也可以获得 token 并发送它。

最佳答案

虽然您无法阻止用户使用控制台来操作您的代码。我可以建议如下:

  1. 您可以对从单个用户接受的 Ajax 请求的数量设置服务器端限制。

  2. 添加验证码,如果您看到异常事件

  3. 混淆你的代码和 AJAX 调用格式,因此它需要用户更多的努力来分析代码并且会阻止大多数人

  4. 使用动态生成的图像和位于随机位置的答案“单选按钮”并提交回用户点击事件的 x 和 y 位置,并使用服务器端逻辑将点击位置与答案选项相匹配

    <

关于javascript - 使用浏览器控制台发送ajax数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35761981/

相关文章:

javascript - 词法作用域/闭包和全局函数递归

javascript - Protractor 无法设置 ng-model 值

php - 创建登录表单错误消息(php、css、html)

javascript - 如何使用 jQuery 将对象解析为 JSON?

jquery - 使用 mysql 和 nodejs 更新查询时出现 ER_PARSE_ERROR

javascript - 按 group_sort_order 对 EXTJS 的 GridPanel 中的分组数据进行排序

javascript - 如何忽略所有正斜杠并仅将页面与 Tampermonkey 匹配?

php - 如何获得最大数量的不同值

php - 当sql join中存在两列同名时如何从一个表列中获取值

javascript - jQuery:为什么 index() 在动态更改 DOM 后返回 -1?