2010-07-01 186 views
3

为了安全起见,我已经从博客的其中一个读取,其建议在服务器端而不是客户端执行 输入数据验证。客户端验证疑惑

从上面的陈述中,我的脑海里开始询问,然后 1)在客户端,JS可以做什么样的验证。 2)是否有任何规则让程序员可以决定需要执行验证的地方,无论是在客户端还是服务器端?

我建立基于Java的Web应用程序

回答

2

如果用户禁用JavaScript的您的验证不会发生在客户端,在具有唯一的服务器端验证对方意味着用户必须等待呼叫结束(客户端到服务器,然后返回),它可能会让他感到沮丧。

客户端验证是为了让用户满意,这样他就不必等待太多才能看到他拼错了邮件地址。

2

我认为主要的一点是,你应该在服务器端偏执,而不是假设传递给你的数据已被客户端正确验证。客户端可能是旧版本,它不能正确验证某些内容,或者验证可能被禁用 - 或者请求可能来自破解者,试图破坏系统。

当然,部分(或全部)验证也可以在客户端执行,以避免无用的网络流量并缩短延迟。

6

您可以对客户端进行任何验证,但绝对不能依赖该验证。

对于用户界面来说,在客户端验证通常是一个好主意,因为响应时间更快。但由于用户总是可以关闭客户端验证(例如通过关闭JavaScript),所以您决不能依赖它来实际执行并重新验证您在服务器上的输入。

一般来说,如果检查对安全至关重要,则不要在用户可以控制的系统上执行检查。

5

那么,当黑客用自己的喜好替换你的JavaScript,或者只是简单地提交POSTs和GETs,就好像它是你的代码一样,会发生什么?

在客户端验证是一个可用性问题。

在USAGE点验证是一个安全问题。

例如,在存储到SQL数据库之前,您将针对SQL注入的数据进行验证 - 如果您选择一个好的数据库,该库会为您执行此操作。当您将数据显示为HTML时,您可以根据CSS验证数据。但是,如果您将数据作为XML,RSS或JSON公开,那么验证是不同的 - 如果您仅在输入时对其进行验证,则不会阻止针对其他格式的漏洞利用,并且您的输入例程将绑定到输出您选择的格式。

规则: - 客户端验证可以很容易地绕开。无论客户端验证如何,您都应该验证服务器上的敏感数据。在客户端验证它们只是改善用户体验的问题。

1

客户端验证只是为了节省客户端时间,所以当他们输入和无效的值时,它说“不好的价值”,没有页面需要重新加载。

虽然客户端验证应视为NO验证,因为客户端可以禁用此验证并输入错误的值。

服务器应始终验证输入的数据。客户端验证仅适用于可用性。

+0

客户端如何禁用验证?你能告诉我 – gmhk 2010-07-01 11:43:50

+2

Firefox例如可以让你在你的浏览器中禁用Javascript。 – 2010-07-01 12:05:35