依靠 HTML '必需' 进行简单的表单验证

Posted

技术标签:

【中文标题】依靠 HTML \'必需\' 进行简单的表单验证【英文标题】:Relying on HTML 'required' for simple form validation依靠 HTML '必需' 进行简单的表单验证 【发布时间】:2013-04-14 13:06:29 【问题描述】:

我的问题很简单,我正在使用 htmlphp 和 jQuery 为我的网站编写一个简单的登录/注册表单。

当我可以在每个输入上使用 HTML-s required 标签并使用 PHP 检查用户名可用性和密码匹配时,是否还需要在 PHP 中编写表单验证?

我认为在后端也进行验证是一种很好的做法,但似乎 HTML 中的“必需”函数会处理所有这些?这很容易被误用吗,仅依靠 HTML 进行简单的表单验证的一般缺点是什么?

【问题讨论】:

谢谢大家,回答得很好,我会 +1 你们所有人,但没有代表。 【参考方案1】:

是否也需要用 PHP 编写表单验证

您永远不能依赖任何形式的客户端验证。它总是可以被绕过的。

人们可能正在使用不支持 HTML 5 验证属性的浏览器,或者可能使用 DOM 检查器将其删除。

关闭 javascript 即可轻松绕过 JavaScript 解决方案。

可以复制/粘贴、编辑表单,然后从用户拥有的页面提交。

HTTP 请求可以手动构建而无需靠近表单。

等等。等等

只能为方便用户而提供客户端验证。您的系统的保护只能在服务器端处理。

【讨论】:

【参考方案2】:

您永远不应该依赖前端验证。也不是 Javascript 或 HTML。用户可以打开您的注册表,使用 firebug 或其他工具,检查文本框并删除 required 属性。也可以发送到您的后端 POSTed 变量,即使不打开您的前端

【讨论】:

【参考方案3】:

必须在服务器上进行验证

但是,您可以通过在客户端和服务器上进行验证来美化事情,以便用户获得即时反馈,但是在 PHP 中进行验证是必要的。

【讨论】:

【参考方案4】:

将客户端验证视为可用性问题而将服务器端验证视为安全问题可能会有所帮助。

在可用性可能被描述为“值得拥有”的地方,安全性绝对是“必须拥有的”。

【讨论】:

以上是关于依靠 HTML '必需' 进行简单的表单验证的主要内容,如果未能解决你的问题,请参考以下文章

HTML5 表单必需属性。设置自定义验证消息?

PHP 表单验证

多字段的 MVC 表单验证

不使用 django 表单如何验证和保存表单数据

PHP 表单 - 3(PHP 表单 - 必需字段)

JSF 跳过没有立即=真的必需验证