我从其中一个博客上读过,出于安全考虑,建议做一下 在服务器端而不是客户端输入数据验证。
从上面的陈述,我的思绪开始问 1)我可以在客户端使用JS做什么样的验证。 2)是否有任何规则可以让任何程序员决定在哪里进行验证,无论是在客户端还是服务器端?
我正在构建基于Java的Web应用程序
答案 0 :(得分:6)
您可以在客户端上进行任何类型的验证,但您绝不能依赖该验证。
出于UI的目的,在客户端验证通常是一个好主意,因为响应时间更快。但由于用户始终可以关闭客户端验证(例如,通过关闭JavaScript),因此您必须永远不要依赖它来实际执行并重新验证服务器上的输入。
通常,如果检查对安全性至关重要,请不要在用户可以控制的系统上执行此操作。
答案 1 :(得分:5)
那么,当黑客用他们喜欢的一个替换你的javascript,或者只是简单地提交POST和GET时会发生什么呢?就像你的代码一样?
在客户端进行验证是一个可用性问题。
在USAGE点验证是一个安全问题。
例如,在存储到SQL数据库之前,您可以根据SQL注入验证数据 - 如果您选择一个好的数据库,库将为您执行此操作。当您将数据显示为HTML时,可以根据CSS验证数据。但是如果您将数据公开为XML,RSS或JSON,那么验证就不同了 - 如果您仅在输入时验证它,则不会阻止对其他格式的攻击,并且您的输入例程将与输出相关联您选择的格式。
规则: - 可以轻松规避客户验证。无论客户端验证如何,您都应始终验证服务器上的敏感数据。在客户端上验证它们只是改善用户体验的问题。
答案 2 :(得分:2)
如果用户禁用javascript,您的验证将不会在客户端进行,另一方面只有服务器端验证意味着用户必须等待呼叫结束(客户端到服务器然后返回),它可能会让他感到沮丧。
客户端验证是为了让用户满意,这样他就不必等太多,看不到他拼错了邮件地址。
答案 3 :(得分:2)
我认为主要的一点是,您应该在服务器端偏执,而不是假设传递给您的数据已被客户端正确验证。客户端可能是旧版本,无法正确验证某些内容,或者验证可能被禁用 - 或者请求甚至可能来自破解者,试图破坏系统。
当然,部分(或全部)验证也可以在客户端执行,以避免无用的网络流量并减少延迟。
答案 4 :(得分:1)
客户端验证仅用于保存客户端时间,因此当他们输入和无效值时,它会显示“错误值”而页面不需要重新加载。
虽然客户端验证应被视为无验证,因为客户端可以禁用此验证并输入错误值。
服务器应始终验证输入的数据。客户端验证仅用于可用性。