如果用户在客户端更改html / javascript变量,如何防止黑客入侵?

时间:2010-07-06 13:48:48

标签: javascript

使用像FireBug这样的简单工具,任何人都可以在客户端更改javascript参数。如果有人花时间研究你的应用程序一段时间,他们可以学习如何更改JS参数,从而导致攻击你的网站。

例如,简单用户可以删除他们看到但不允许更改的实体。我知道一个优秀的开发人员必须检查服务器端的所有内容,但这意味着更多的开销,您必须首先检查来自数据库的数据,以便验证请求。这需要花费大量时间,因为每个人都必须对其进行验证,并且只能通过从DB中获取所需的数据来执行此操作。

在这种情况下,您会采取哪些措施来最大限度地减少黑客行为?

更简单的验证方法是为每个javascript函数添加另一个参数,此参数必须是先前参数和密钥之间的签名。

上面的解决方案听起来有多好?

我们的团队使用teamworkpm.net来组织我们的工作。我刚刚发现我可以通过更改javascript函数(最初编辑我自己的任务)来编辑其他任务。

7 个答案:

答案 0 :(得分:16)

当每个函数调用服务器时,在执行操作之前在服务器端,您需要检查是否允许该用户执行此操作。

有必要构建服务器端权限机制以防止不必要的操作,您可能希望定义用户组,而不是单个用户级别,这样可以更容易。

答案 1 :(得分:6)

客户端的任何内容都可能被欺骗。如果您使用某种类型的密钥+参数签名,您的签名算法必须足够随机/安全,以至于无法进行逆向工程。

通过添加客户端复杂性创建的开销最好用于制作正确的服务器端验证。

答案 2 :(得分:4)

  

在这种情况下,你会采取什么措施来减少黑客行为?

您无法在服务器端使用验证方法。

  

更简单的验证方法是为每个javascript函数添加另一个参数,此参数必须是先前参数和密钥之间的签名。
  上述解决方案对您有多好?

如果没有客户端看到它,你如何使用密钥?正如你之前提到的那样,用户可以轻松地操作你的javascript,而且他也可以用javascript,秘密密钥读取所有内容!

你无法在JavaScript中隐藏任何内容,你唯一能做的就是在JavaScript中模糊一些东西,并希望没有人试图找出你试图隐藏的内容。

答案 3 :(得分:2)

这就是您必须验证服务器上的所有内容的原因。你永远不能保证用户不会弄乱客户端上的东西。

一切,甚至你的javascript源代码都可以被客户看到,并且可以由他们改变,但是没有办法解决这个问题。

答案 4 :(得分:1)

真的没有办法在客户端做到这一点。如果此人拥有有效的身份验证cookie,他们可以制作他们想要的任何类型的请求,而不管页面上的代码如何并将其发送到您的服务器。您可以使用必须与请求一起发回的其他加密cookie执行操作,并且还必须匹配页面上的输入,但您仍需要检查此服务器端。服务器端安全性对于保护您的应用程序免受未经授权的访问至关重要,您必须在服务器端确保正在执行的每个操作都是用户有权执行的操作。

答案 5 :(得分:1)

你当然无法隐藏任何客户端,因此尝试这样做没什么意义。

如果您所说的是您发送的内容类似于用户ID,并且您希望确保返回的值未被非法更改,那么最简单的方法是生成并发送{{3}并且在进行任何进一步处理之前,检查返回的uuid的值是否与用户ID存储在服务器上的值相匹配。 uuid的空间是如此之大,以至于你可以对任何曾经发生的错误命中进行打折。

对于实际的服务器端处理漏洞: - 您应该始终将您的安全性/权限尽可能地建立在尽可能靠近数据库的位置,并且肯定不在客户端中。您从任何正常的客户端 - 服务器设计中概述的场景没有什么不同。

答案 6 :(得分:1)

Peter来自Teamworkpm.net - 我是主要的开发人员之一,并担心会遇到有关安全问题的报告。我检查了这个,我很高兴无法删除你不应该访问的任务。

您收到一条消息“您无权删除此任务”。

我认为只是作为项目管理员和作为整体管理员之间的混淆是这里的问题: - 您可能不是项目的成员,但作为整体管理员,您仍然有权删除任何任务在您的团队合作网站中。这是设计的。

我们非常重视安全性,并且它都是服务器端实现的,因为正如Jens F所说,我们无法回复客户端安全性。

如果您确实遇到过想要讨论的TeamworkPM中的任何问题,我们建议您只需点击反馈链接,通常会在几个小时内得到答案。