我如何确信用户没有更改文本框值?

时间:2015-12-12 17:43:30

标签: javascript php jquery ajax authentication

我正在使用Wordpress,并希望将用户ID发送到服务器以便使用AJAX进行处理。所以我将这个值(user_id)存储在一个隐藏的输入文本框中,每次我读取这个值时,将它传递给jQuery并通过AJAX发送到服务器。问题是用户可以更改此值(通过检查页面)。以下代码是我的尝试之一:

<input hidden="true" type="text" id="userid" value="<?php echo get_current_user_id() ?>">

<script type="text/javascript">
   $( document ).ready( function(){     
      var previousValue = $("#userid").val();
      $("#userid").keyup(function(e){
      var currentValue = $(this).val();
      if(currentValue != previousValue){
         $('#userid').val(previousValue);
      }
     });
    }
</script>

但显然当用户检查页面(通过Chrome,Firefox或其他任何内容)并更改值时,它无法执行。如何验证用户ID?

2 个答案:

答案 0 :(得分:1)

这不可能。您无法保证客户端上发生的任何事情。防止某人篡改用户ID的所有方法都依赖于浏览器执行它,但客户端可以在其计算机上运行任何软件。因此,所有安全安排必须基于客户发送的任何数据都不可信任的假设。

我想你要做的就是识别用户。实际上可以通过使用PHP session来实现。而是将用户ID存储在PHP会话变量中。如果需要,可以将其传递给客户端,但不要依赖它来强制执行任何身份验证。换句话说,不要让客户端将其传递回服务器。

那么,这对你来说意味着什么呢? Wordpress已经使用PHP会话来跟踪用户。当你进行AJAX调用时,我认为它会进入某个PHP页面。该PHP脚本应该只使用get_current_user_id()从Wordpress(即服务器)获取用户ID,而不是从客户端发送它。

答案 1 :(得分:0)

请按照以下步骤操作:

  1. 使用散列技术并哈希您的用户ID。
  2. 将原始用户ID和哈希值发送到客户端系统(隐藏字段可以是一个选项)。
  3. 通过ajax从客户端发送回用户ID和哈希值。
  4. 在服务器中再次使用相同的散列技术散列用户标识。
  5. 如果过去的哈希值与最近的哈希值匹配,则没有任何篡改。