如何阻止客户使用检查员更改网页数据?

时间:2014-01-13 13:14:14

标签: javascript php jquery html

好的,这是我一直处理的问题。

我的网页加载了一些li个元素。它们都有自己的id,这是数据库中的primary_key id。可以从数据库中删除每个元素。删除的过程由JQuery的$.POST方法完成,获取该元素的id并将其传递给获取id的php文件,并从数据库中删除相应的记录。

在Google或Firefox的检查器中,如果我更改元素的id值,然后按该元素的删除按钮,则删除具有该ID的其他元素。

示例:我们要从数据库中删除ID为45的“Mohsen”。

<script>
   $('li').click(function(){
      var id = $(this).attr(id);
      $.post('delete.php',
         {r_id: id}
      );
   });
</script>

HTML:

<li id="45">mohsen</li>
<li id="35">vahid</li>
<li id="25">neda</li>

上面的代码与最初加载的一样。当我点击“mohsen”时,“mohsen”会从数据库中删除,因为他的ID为 45 。但是,如果我使用检查器并将id值更改为:

<li id="25">mohsen</li>
<li id="35">vahid</li>
<li id="45">neda</li>

现在,当点击“mohsen”时,会删除数据库中primary_key id值为 25 的“neda”,而我们并不打算允许这样做。

有没有办法阻止用户使用检查器操作标记数据?换句话说,如何正确地从数据库中删除“Mohsen”,即使其id值被篡改? 注意: mohsen就是一个例子,每个li都可以删除。

3 个答案:

答案 0 :(得分:6)

减少操作尝试的一种方法是不按ID删除,而是删除一些独特的随机哈希。您可以将该随机散列作为主键,也可以在数据库中创建一个额外的列。

data_tbl(id (pk), hash, value)

例如,如果您的哈希值如下:a89x1uAp3,那么根据该哈希计算其他记录的哈希值将非常困难。

只是不要通过帖子传递你的ID,但你的哈希和问题几乎受到限制。

答案 1 :(得分:5)

您无法阻止用户使用检查员查看页面,如果您希望阻止删除某些记录,则唯一可以实现自己的服务器端验证。

另外,如果可能的话,尽量不要暴露你的主键,只有一些派生的信息,比如@Thomas David Plat建议的散列。

答案 2 :(得分:0)

您无法阻止用户查看/更改检查器中的数据。您唯一能做的就是进行服务器端验证,例如从客户端发送文本,在您的情况下可以是“Neda”,“Mohsen”等,并且首先验证该特定ID是否属于该文本/名称。但这纯粹是服务器端的事情,但AFA客户端方面担心你不能这样做。