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

时间:2015-07-23 20:34:41

标签: javascript jquery dom data-storage

我试图找出在用户点击按钮时存储数据最安全的方法。

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

<button type="button" value="1" data-value="1">Click me!</button>

但问题是用户(可能只是高级用户)可以使用firebug或其他应用程序操作值,然后单击按钮并发送不同的数据。我完全理解在尝试对发送的数据做任何事情之前我需要检查输入。

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

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

我只是想知道是否有更安全的方式存储数据或方式,以便用户在点击按钮之前无法操作数据。

5 个答案:

答案 0 :(得分:2)

考虑这个功能:

function setupPrivateData(element) {
  var private = 1; 
  element.setPrivate = function ( d ) { private = d; }
  element.getPrivate = function ( ) { return private; }
}

使用某些DOM元素调用时,它会向其添加两个方法:.setPrivate(val).getPrivate()

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

答案 1 :(得分:1)

用户始终可以操纵数据。没有什么能阻止高级用户访问对象属性或自己调用jquery.data()

你可以在vanilla js中做的事情是:

    var div = document.getElementById("test");
    div.something = "hidden value";
    
    div.addEventListener("click", function() {
        alert(this.something);
    });
<div id="test">click me</div>

如果发送的数据有效,最好的方法是进行服务器端验证。

除此之外,您可以尝试将代码包装在匿名函数中以拒绝用户访问该对象:

(function() {
    var data = {};
    data.something = "test";
})()

但是,即使在用户操作文件并添加例如调试器语句时也会失败。

答案 2 :(得分:1)

您可以对您的javascript进行模糊处理,但唯一的验证必须在您的服务器上完成。例如,我试图从theweathernetwork获取天气。他们使用多个文件和回调隐藏了他们的API调用。在我看来,如果你想对他们的网站进行逆向工程,那就更具挑战性(更有趣)了。

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

这是一个很大的话题,你需要学习很多东西,这里的评论太多了。任何&#34;存储&#34;在HTML源代码中的属性绝对不安全,它可以非常容易地更改。

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

如果安全性很重要,找一些识别用户的方法(可能是通过IP,但即使这不是傻瓜证明!)并将数据保存在服务器上,链接到用户ID后可以检索点击按钮。