Javascript 存储按钮点击数据的安全方法

Javascript 存储按钮点击数据的安全方法,javascript,jquery,dom,data-storage,Javascript,Jquery,Dom,Data Storage,我试图找出当用户单击按钮时,存储数据以供使用的最安全的方法 我知道您可以在按钮标记的属性(值属性或数据属性)中存储数据,如下所示: <button type="button" value="1" data-value="1">Click me!</button> 点击我! 但问题是,用户(可能实际上只有高级用户)可以使用firebug或其他应用程序操纵值,然后单击按钮发送不同的数据。我完全理解,在我尝试处理发送的数据之前,我需要检查输入 我还发现可以使用jQuery的

我试图找出当用户单击按钮时,存储数据以供使用的最安全的方法

我知道您可以在按钮标记的属性(值属性或数据属性)中存储数据,如下所示:

<button type="button" value="1" data-value="1">Click me!</button>
点击我!
但问题是,用户(可能实际上只有高级用户)可以使用firebug或其他应用程序操纵值,然后单击按钮发送不同的数据。我完全理解,在我尝试处理发送的数据之前,我需要检查输入

我还发现可以使用jQuery的
.data()
将数据附加到dom元素,这似乎更有用。我不确定数据是如何存储的,但我认为它更难操作

让我对这个问题真正感兴趣的是,当我在firebug中查看Soundcloud的代码时,我发现没有一个“like”按钮有数据附加到按钮上。我试图删除/操作元素/数据,但按钮仍然有效。所以我认为他们可能使用了与jquerys data()类似的过程


我只想知道是否有一种更安全的方法来存储数据,还是有一种方法可以让用户在单击按钮之前无法操作数据。

如果要记录按钮的单击,最安全的跟踪方法是在服务器端保存和验证

例如,当您单击Soundcloud上的like按钮时,它会向Soundcloud的服务器发出HTTP请求,记录您单击该按钮的内容,并将其标记为收藏夹。这样,如果同一用户在将来的任何时候单击该按钮,它可以在增加收藏夹数量之前进行检查


当呈现视图时,按钮中显示的数字也会从数据库中拉入。

这是一个庞大的主题,您有很多东西要学习,这里的评论太多了。HTML源代码中属性中“存储”的任何内容都是绝对不安全的,可以很容易地进行更改

最常见的处理方法是使用cookie,但即使付出一些努力,这些cookie也可以被操纵


如果安全性很重要,请找到某种方法来识别您的用户(可能是通过IP,但这也不是傻瓜式的!),并将数据保存在服务器上,链接到用户ID,单击按钮后可以检索到该ID。

用户始终可以操作数据。没有任何东西可以阻止高级用户自己访问对象属性或调用
jquery.data()

您可以在vanilla js中执行以下操作:

var div=document.getElementById(“测试”);
div.something=“隐藏值”;
div.addEventListener(“单击”,函数(){
警惕(这件事);
});

单击我
考虑此功能:

function setupPrivateData(element) {
  var private = 1; 
  element.setPrivate = function ( d ) { private = d; }
  element.getPrivate = function ( ) { return private; }
}
当使用某个DOM元素调用时,它将向其中添加两个方法:
.setPrivate(val)
.getPrivate()


这些是仅允许您访问和修改与元素关联的私有变量的方法

您可以混淆javascript,但唯一的验证必须在服务器上完成。例如,我试着从天气预报中了解天气。他们使用多个文件和回调隐藏了API调用。在我看来,如果你想对他们的网站进行反向工程,那就更具挑战性(更有趣)


Javascript不安全。永远不要相信用户输入

我不认为用数据值存储数据是个问题。因为在客户端存储数据时,有一种方法可以对其进行操作。@abs我明白了。我不知道。所以我真的只能在手之前验证输入,嗯?更好的选择是:将其存储在后端并使用客户端(散列)id。或者,在客户端使用更多(编码)数据,但始终验证后端!是的,但我的意思是当你点击按钮时,soundcloud怎么知道你喜欢那首歌呢。比如,它与同一页面上的数百个其他类似按钮有什么区别。soundclouds页面上的like按钮没有数据属性。哦,有趣,我喜欢这个想法。您是否也认为模块模式或显示模块模式会像您的示例那样有用?我不确定我是否理解“模块模式”这个术语。你能详细说明一下吗?这里有一个链接:它基本上是一种设计模式,用于将类和私有方法的概念添加到javascript中。这似乎和你的想法很相似。啊,那。。。模块作为一个概念比在JS中拥有私有变量的任务更广泛。看看这个,我明白了。您认为模块模式或显示模块模式是否也有助于拒绝访问?