从外部访问保护jQuery功能

时间:2010-07-23 06:04:58

标签: javascript jquery html security web-applications

我在一个应用程序中使用jQuery,该应用程序通过.click()绑定注册用户点击以执行给定操作,并且我希望此功能仅通过用户mousedown 可用。我的一位朋友今天指出,可以从Firebug中的javascript终端(或类似的东西)运行$(element).click(),并实现与点击元素相同的功能 - 我想要的东西防止。关于如何做到这一点的任何想法?感谢您的投入。

4 个答案:

答案 0 :(得分:10)

简答:不,你无法真正阻止它。

答案很长:像click event这样的任何事件都绑定到这样的名为Event handlers的事件。这些处理程序是functions,它们在给定事件发生时执行。因此,如果您单击某个元素,浏览器会检查是否有任何event handlers绑定到它,如果是,fires它们。如果没有,浏览器会尝试将bubble up事件发送到parent elements,再次检查是否有任何event handlers绑定到此类事件......等等。

jQuerys .trigger()方法(例如,如果调用.click(),您实际调用的方法)就是做同样的事情。对于特定事件,它会调用绑定到特定元素的event handlers

修改

可能有一些简单的方法可以让某些soft detect真正的点击,例如,您可能会检查toElement中的event object属性。 triggered时未设置该属性。但话说回来,你可以轻易地假装.trigger()。例如:

$(document).ready(function() {
  $('#invalid2').bind('click', function(e){
      alert('click\nevent.target: ' + e.toElement.id);
      console.log(e);
  });

  $('#invalid1').bind('click', function(){
      $('#invalid2').trigger({
          type: 'click',
          toElement: {id: 'Fake'}
      });
  });
});​

工作示例:http://www.jsfiddle.net/v4wkv/1/

如果您只是致电$('#invalid2').trigger('click'),则toElement属性不会出现,因此会失败。但正如您所看到的,您可以在event object中添加任何内容。

答案 1 :(得分:1)

你想阻止什么?有人搞乱你的客户端脚本?你可以做一些事情,比如模糊你的代码,但除此之外没什么。但即使这样做也只是让我觉得比它的价值更麻烦。

如果您不希望人们执行某些操作,请将功能移至服务器。

很抱歉收到坏消息。

答案 2 :(得分:1)

你无法对它做任何反对,也可以编写完整的函数然后解它。

但为什么这是一个问题呢?如果某人正在改变客户方面的东西,那只会影响他。或者您正在尝试检查一些数据?这必须始终在后端完成,因为你永远无法确定真正发送给它的是什么。

答案 3 :(得分:0)

您可以检查事件对象(作为第一个参数传递给处理程序)originalEvent。 如果事件是通过.click()

模拟的,那么它将是未定义的

但它完全没用。你不能使用javascript来保证安全 - 客户端可以完全控制它(而firebug控制台只是最明显的工具)。客户端安全检查应仅提示用户并防止错误,恶意输入只能在服务器端停止。