是否建议在客户端进行所有必要的输入验证?我想优化服务器的处理(意味着较少的双重验证,以便程序员可以只关注业务逻辑)。
示例:
在客户端,有一个'年龄'输入textfield
(JavaScript
将不允许提交表单,除非它在该范围内)
在服务器端,不再需要验证'年龄
//而不是再次验证年龄
int age = Integer.parseInt(request.getParameter(" age")); //检查年龄是否有效
if(age> = 0){/ * codes * /}
我们只能继续
int age = Integer.parseInt(request.getParameter("age"));
因为我们非常确定它是有效的。
要在Web浏览器中容纳已禁用的JavaScripts
,我们需要先检查。如果启用了JavaScript
,请继续执行该应用程序,否则将阻止该应用程序。 (就像Facebook一样)
我的理论/概念是否可以接受?
答案 0 :(得分:2)
如果您需要强制执行某些输入模式,则不能依赖来自客户端的数据。人们可以禁用JavaScript,或者完全绕过验证并发送他们想要的任何数据。但是,大多数临时用户都不会遇到这个问题,而且数据来自客户端。
简而言之,取决于。
对于我的大多数应用程序,我都有客户端验证,只担心服务器端可能会出现错误情况。例如,如果我有一个向某人发送电子邮件的表单,我将使用JavaScript检查有效的to:
电子邮件地址,并提醒用户。服务器端,如果该电子邮件地址无效或不存在,我只会抛出一个错误编写代码,让用户很好地知道出了问题。对于消息体,我将验证客户端是否有一个,但服务器端我不会真正关心。同样,你所做的事情取决于你的需求。
答案 1 :(得分:0)
如果担心安全性/数据完整性,我会建议不要这样做。虽然这足以阻止Joe Smith输入不需要的数据,但您可以让系统对那些了解网络运行方式的人进行严格的数据操作。
假设您有一个类似于StackOverflow的投票系统,无论何时用户投票,都会进行AJAX调用。虽然JS验证可能会阻止某人使用显示的HTML在同一个问题或答案上投票多次,但它不会阻止用户进入他们的浏览器控制台并手动提交POST或GET请求来绕过JS验证。在你知道它之前,你会看到Lloyd Banks在回答几个问题后获得10万的声誉
答案 2 :(得分:0)
我相信无处不在的验证
我喜欢对客户端进行验证:
服务器端验证:
用户输入是敌人!用户会找到一种方法来自愿或不自愿地破坏您的网站。事情会陷入困境。 所以我强烈支持双重和三重检查。
我会相信客户端验证可以节省服务器处理,如果不是因为我担心这种想法会让我的例外变得更加突出。
总体而言,我认为富客户端验证的原因是: