我如何保护此代码? jQuery和Codeigniter

时间:2014-03-22 20:14:35

标签: jquery codeigniter-2

我正在构建一个小型多选应用程序。以下两个选项是从查询生成的。按下其中一个后,ajax将数据发送到表格,插入“下一个”按钮,当按下时,还有两个选项可用。

我刚注意到,如果通过inspect元素选项复制并插入html中的id="4"class="pick"元素,则可以反复对id 4进行投票... 什么是防止这种情况的好方法?

<ul class="thisClass">
    <li class="first"><a href="#" class="pick" id="4">mercedes</a></li>
    <li class="last"><a href="#" class="pick" id="8">alfa romeo</a></li>          

</ul>

jQuery

$('.thisClass').on('click', '.pick', function(e) {
    e.preventDefault;

    var pickID = $(this).attr('id');
    var notPickID = $('.pick').not('#' + pickID).attr('id');

  $.ajax({
         type: "POST",
         url: "http://mywebsite.com/index.php/home/user_pick",
         data: {pick : pickID, notPick : notPickID},
         success:
              function(data){

                $("ul.thisClass").html(data.content);

                $("div#next_button").html('<a href="#" class="next" id="next">Next</a>');

              }
          });
     return false;
});

2 个答案:

答案 0 :(得分:0)

您需要将确保没有重复项所需的所有信息发回服务器。

  1. userID
  2. surveyID
  3. questionID
  4. answerID
  5. 获取服务器项目1,2和&amp;的值时3必须是唯一的组合...否则用户正在尝试提交多个答案(有意或无意)。

    注意:如果您的问题与调查相关联,请在确定唯一性时将上面的#2视为可选。

    此外......一旦您注册了用户对给定问题的答案,您就可以让您的AJAX返回一个标志,告诉您JavaScript代码应禁用该问题或将其显示在“完成”状态,以便用户不会尝试重新回答它。

答案 1 :(得分:0)

事实上,他们不需要通过inspect元素选项复制并插入html到&#34; hack &#34;您的网站,只需将包含数据{pick : pickID, notPick : notPickID}的POST请求发送到http://mywebsite.com/index.php/home/user_pick,您的网站就会关闭。您必须在服务器端进行验证。

解决此问题的一个好方法是防止来自同一用户的多次选择(如果您的拣货系统不需要帐户,则阻止相同的IP地址),获取UserID或控制器中的UserIP用于检查用户是否被选中。