我试图找出在用户点击按钮时存储数据最安全的方法。
我知道您可以将数据存储在按钮标记的属性(值属性或数据属性)中,如下所示:
<button type="button" value="1" data-value="1">Click me!</button>
但问题是用户(可能只是高级用户)可以使用firebug或其他应用程序操作值,然后单击按钮并发送不同的数据。我完全理解在尝试对发送的数据做任何事情之前我需要检查输入。
我还发现我可以使用jQuery的.data()
将数据附加到dom元素,这似乎更有用。我不确定数据是如何存储的,但我认为它更难以操作。
让我对这个问题真正感兴趣的是当我在firebug中查看 Soundcloud的代码时,我发现没有任何“喜欢”按钮将数据附加到按钮上。我尝试删除/操作元素/数据,按钮仍然有效。所以它让我觉得他们可能正在使用与jquerys data()正在做的类似的过程。
我只是想知道是否有更安全的方式存储数据或方式,以便用户在点击按钮之前无法操作数据。
答案 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后可以检索点击按钮。