PHP验证是否需要JavaScript验证?

时间:2017-09-14 09:08:00

标签: javascript php forms validation

使用javascript和php验证表单时,为什么我们需要在服务器和浏览器上包含相同的验证规则(即正确的格式,填写检查字段,边界内的值)?我知道javascript可以关闭,所以为什么不在服务器上安装所有内容并保存两次检查?

5 个答案:

答案 0 :(得分:0)

通常,利用客户端验证可为用户提供更好的体验。例如,代替用户填写表单,然后提交它以发现他们已经犯了错误,使用Javascript我们可以在他们完成输入时让他们知道。对于用户来说,这是一种更多更容易/更清洁/更快捷的方法来解决他们的错误。

使用客户端验证时,您还必须使用后端验证,因为可以操纵javascript。例如。如果他们进入开发工具检查器并更改验证脚本以允许输入恶意详细信息,会发生什么?或者,如果他们注入自己的恶意脚本呢?或者如果他们在整个浏览器中关闭Javascript呢?这就是后端验证发挥作用的地方。

答案 1 :(得分:0)

验证用户提交的表单非常重要,因为它可能包含不适当的值。因此必须进行验证。

JavaScript为您提供了在客户端验证表单的工具,因此处理速度比服务器端验证快。因此,大多数Web开发人员更喜欢JavaScript表单验证。

通过JavaScript,我们可以验证姓名,密码,电子邮件,日期,手机号码等字段。

正如其他人所说,你应该做到这两点。原因如下:

客户端

您希望首先在客户端验证输入,因为您可以向普通用户提供更好的反馈。例如,如果他们输入无效的电子邮件地址并移至下一个字段,则可以立即显示错误消息。这样,用户可以在提交表单之前更正每个字段。

如果您只在服务器上进行验证,则必须提交表单,收到错误消息,然后尝试搜索问题。

(通过让服务器在填写用户原始输入的情况下重新呈现表单,可以缓解这种痛苦,但客户端验证仍然更快。)

服务器端

您希望在服务器端进行验证,因为您可以保护免受恶意用户攻击,他们可以轻松绕过您的JavaScript并向服务器提交危险输入。

信任您的UI非常危险。 他们不仅可以滥用您的用户界面,而且可能根本不使用您的用户界面,甚至是浏览器。如果用户手动编辑URL,或运行自己的Javascript,或使用其他工具调整HTTP请求,该怎么办?如果他们从curl或脚本发送自定义HTTP请求,例如?

,该怎么办?

(这不是理论上的;例如,我在一个旅行搜索引擎上工作,通过发送POST请求将用户的搜索重新提交给许多航空公司,公交公司等,就好像用户填满了每家公司一样#39; s搜索表单,然后收集并整理所有结果。那些公司&JS形式的JS从未被执行过,而且它们在返回的HTML中提供错误消息对我们至关重要。当然,API本来就是很好,但这是我们必须做的。)

不允许这样做不仅从安全的角度来说是天真的,而且也是非标准的:应该允许客户端以他们希望的任何方式发送HTTP,并且您应该正确响应。这包括验证。

服务器端验证对于兼容性也很重要 - 并非所有用户(即使他们使用浏览器)都会启用JavaScript。

答案 2 :(得分:0)

我建议服务器端验证并使用JS / AJAX来做客户端,这样你在服务器上就有了一组验证规则,你仍然可以在没有页面刷新的情况下获得客户端响应。请记住,有些人选择不打开JS(我的客户在JS被关闭的政府部门工作)所以你需要一个后备位置。

为了澄清:创建预验证JS函数,使用对服务器的AJAX调用发布数据,然后服务器将验证规则应用于数据并将响应(XML / JSON /等)返回给您的JS验证函数。然后,您的JS将处理成功/失败的响应检查。失败时显示错误消息(可能是响应中的某些数据集),并且成功后继续将表单数据发布到服务器进行处理。然后,服务器需要对发布数据再次(使用相同的验证函数/逻辑)运行验证,以确保在此过程中没有任何内容被篡改。然后,最后,处理服务器上的数据,用它做任何你想做的事情

答案 3 :(得分:-1)

每次用户向服务器发送数据时,它都会在服务器上验证并返回响应,无论数据是有效(200 HTTP Code)还是无效(400 HTTP Code)。

示例有效负载

{ "name": "@batman#123" } //Invalid data gets sent to the server and processed

整个过程消耗内存和时间。因此,为了保存这些,我们根本不发送先前的请求。在上一个示例客户端输入他的名字“@ batman#123”时会出错,并且删除了使用服务器的整个过程。

答案 4 :(得分:-3)

根据我的经验和意见,您只需要在JS中进行验证。是的,听起来很奇怪,但不需要进行服务器端验证。只需抛出异常和400响应代码。

使用这种方法可以避免出现像

这样的问题

we have different error messages for all fields if user use german language. Why it happen?

此外,您可以在后端创建干净的休息服务,以及不错的js前端。当然,如果你这样做,你应该注意你的客户部分足够聪明。

注意:

  

如果用户在浏览器中关闭JS,会发生什么?

这意味着用户不想使用供应商提供的客户服务。用户可能会看到“请启用js”。这意味着,该用户应发送有效请求(遵循供应商API)。

  

如果您不在那里进行验证,服务器端代码如何决定是否需要抛出异常?

由于外部或唯一或主键约束失败,数据库可能抛出异常,服务器可能因异常数据类型不匹配而抛出异常。链接到新添加的数据将是格式错误或不可见的。

  

您可以操纵客户端javascript以执行您想要的操作。   当我操纵你的JS验证并进入MySQL数据库时,你可以使用XSS攻击。

如果您要发送有效请求,但有XSS攻击(例如在评论字段中),您将只能对自己执行此攻击,因为只有您尝试使用无效(或自编写)客户端,允许xss。