Bra*_*118 170 javascript security validation
哪个更好做客户端或服务器端验证?
在我们的情况下,我们正在使用
我做的很多验证都是在用户输入数据时验证数据.例如,我使用该keypress事件来防止文本框中的字母,设置最大字符数以及数字在一个范围内.
我想更好的问题是,在客户端进行服务器端验证有什么好处吗?
很棒的回答每个人.我们拥有的网站受密码保护,用户群较小(<50).如果他们没有运行JavaScript,我们将发送忍者.但如果我们为每个人设计一个网站,我同意在双方进行验证.
Nat*_*ong 329
正如其他人所说,你应该做到这两点.原因如下:
您希望首先在客户端验证输入,因为您可以向普通用户提供更好的反馈.例如,如果他们输入无效的电子邮件地址并移至下一个字段,则可以立即显示错误消息.这样,用户可以在提交表单之前更正每个字段.
如果您只在服务器上进行验证,则必须提交表单,收到错误消息,并尝试搜索问题.
(通过让服务器在填写用户原始输入的情况下重新呈现表单,可以缓解这种痛苦,但客户端验证仍然更快.)
您希望在服务器端进行验证,因为您可以防止恶意用户,他们可以轻松绕过您的JavaScript并向服务器提交危险的输入.
信任您的UI非常危险.他们不仅可以滥用您的用户界面,而且可能根本不使用您的用户界面,甚至浏览器.如果用户手动编辑URL,或运行自己的Javascript,或使用其他工具调整HTTP请求,该怎么办?例如,如果他们curl从脚本发送自定义HTTP请求怎么办?
(这不是理论上的;例如,我在旅行搜索引擎上工作,通过发送POST请求,如同用户填写了每个公司的搜索表单,然后收集并整理所有搜索引擎,将用户的搜索重新提交给许多航空公司,公交公司等结果.那些公司的表格JS从未被执行过,而且我们在返回的HTML中提供错误消息对我们至关重要.当然,API本来不错,但这是我们必须做的.)
不允许这样做不仅从安全角度来说是天真的,而且也是非标准的:应允许客户端以他们希望的任何方式发送HTTP,并且您应该正确响应.这包括验证.
服务器端验证对于兼容性也很重要- 并非所有用户(即使他们使用浏览器)都会启用JavaScript.
有些验证甚至无法在服务器端应用程序代码中正确完成,并且在客户端代码中完全不可能,因为它们依赖于数据库的当前状态.例如,"其他人没有注册该用户名",或"您评论的博客文章仍然存在",或"没有现有预订与您请求的日期重叠",或者"您的帐户余额仍然足以涵盖该购买".只有数据库才能可靠地验证依赖于相关数据的数据.开发人员经常搞砸了,但PostgreSQL提供了一些很好的解决方案.
Rob*_*Rob 31
通过客户端验证进行服务器端验证的好处是可以绕过/操作客户端验证:
简而言之 - 始终始终验证服务器端,然后将客户端验证视为增加的"额外"以增强最终用户体验.
好吧,我还有一些空间可以回答.
除了Rob和Nathan的答案之外,我还要补充说,客户端验证很重要.在网络表单上应用验证时,您必须遵循以下准则:
两种类型的验证在各自的范围内都起着重要作用,但最强大的是服务器端.如果您在一个时间点收到10k用户,那么您肯定会最终过滤到您的网络服务器的请求数量.如果您发现有一个错误,例如无效的电子邮件地址,那么他们会再次回复该表单并要求您的用户更正它,这肯定会占用您的服务器资源和带宽.所以你应用javascript验证更好.如果javascript被禁用,那么你的服务器端验证将会解决,我打赌只有少数用户可能会意外地禁用它,因为99.99%的网站使用javascript,并且在所有现代浏览器中默认已经启用.
小智 8
您可以执行服务器端验证并发回一个JSON对象,其中包含每个字段的验证结果,使客户端Javascript保持最小(仅显示结果),并且仍然具有用户友好的体验,而无需在客户端和服务器上重复自己.
| 归档时间: |
|
| 查看次数: |
123659 次 |
| 最近记录: |