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

时间:2016-03-03 02:21:20

标签: javascript php jquery ajax

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

<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页面中是否有点击事件。

这个问题会有更好的解决方案吗?我尝试过令牌,但问题是因为我正在通过ajax加载问题,我必须将令牌保存在隐藏的输入中等,他们也可以得到令牌并发送它。

2 个答案:

答案 0 :(得分:1)

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

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

  2. 如果您看到异常活动,则添加验证码

  3. 模糊您的代码和AJAX调用格式,因此用户需要花费更多精力来分析代码并阻止大多数人

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

答案 1 :(得分:0)

使用服务器端的会话来跟踪每个用户的正确和错误猜测,并执行规则。

只要你依靠客户端来玩好&#34;,你就可以根据最终用户的意愿展示你的应用程序了。