2011-04-08 179 views
20

我在我公司的网站上有一个比赛输入页面。为了参加比赛,您创建了一个登录名,它只是一封电子邮件和一个4位数字的密码。这里的PIN字段:是否有浏览器不支持maxlength?

<input type="password" name="contest_pin" id="contest_pin" maxlength="4" /> 

当用户提交表单,在我们的数据库中创建帐户,然后他们收到一封电子邮件(这我就复制),包含他们创建的电子邮件地址和密码。

以下是我测试过的每个浏览器(Mac上的Safari/Chrome/Firefox,Linux上的Chrome/Firefox,Windows上的IE7/8/9)我无法在该PIN字段中输入超过4位数字。然而,我收到的几封电子邮件显示,该用户创建了超过4个字符的密码。

这怎么可能?是否有浏览器不支持maxlength?我还没有在Opera或任何移动浏览器上进行过测试。如果它们的引脚长度超过4位,这不是什么大问题;数据库将接受更多。我只是想知道他们如何设法达到最大长度。

编辑补充

有太多的答案基本上是说,我单独给所有的人都回应同样的事情。我知道我应该总是对任何重要的服务器端进行验证,并且我们确实有PHP代码来清理数据,如果这非常重要,我还会让PHP代码执行4位数限制。对我们来说它们只有4个字符并不重要,所以我没有强制执行它。我只是想知道为什么maxlength属性没有做它设计的目的,这是为了防止用户输入超过一定数量的字符。对于那些建议使用恶意脚本或Firebug的人,我可以100%确定情况并非如此。只有我们网站的注册用户(仅限于特定的公司会员名单)才能进入参赛作品页面,我可以保证该名单上大约100人不会故意试图绕过输入类型属性。

+0

我在这里得到的问题完全一样,我知道最大长度很容易规避,但是那些没有试图克服障碍的用户呢?我能想到的唯一事情就是Chris所说的,那就是在某些浏览器上复制粘贴它时不起作用。只有一个例子是IE浏览器,如果你在文本区域拥有maxlength属性,那么你可以粘贴超过最大长度的文本..这是不是与输入情况..但也许在其他浏览器..我不知道为什么人们会粘在别针中。让我知道,如果你弄清楚它是如何发生的。 – Trevor 2014-02-26 23:42:01

+0

当你添加type =“number”属性时,maxlength =“x”在MAC上无法工作(chrome&firefox试过):) – 2014-12-12 08:06:40

+0

@MindaugasBernatavičius,那是因为你需要使用'max'和'min'或'range 'type = number'的属性。 – 2015-06-30 23:30:21

回答

7

我相信,每一个浏览器支持它,这里是供参考的几个环节:

Maxlength | SitePointReference

Maxlength | W3 Schools

明明有办法解决这个 - 你应该确保你总是有足够的服务器因为客户端通常是不够的。

+11

只需注意:w3schools通常被认为是编程/网络开发相关信息的次级资源。在其他地方验证信息总是一个好主意。 – MikeTheLiar 2013-01-31 21:28:05

16

他们很可能是机器人读取字段名称,并创建基于这些GET和POST请求,而不是像使用普通人类用户那样使用HTML表单。

这就是为什么客户端验证表单永远不足以确保数据正确的原因。客户端验证非常好,因为它能够响应最终用户,但它无法防止不良数据到达服务器的家门口。

作为一个例子,假设我在表单中有一个输入字段,其操作是GET。我的输入字段的最大长度是4.当我按提交时,我看到以?field=1234结尾的URL。没有任何东西阻止我将该URL更新为?field=123456789并按下回车键。 POST操作可以做类似的事情,但需要一个工具来完成。

+7

也使用像萤火虫这样的工具,我可以编辑网站的html来移除maxlength。 – m4tt1mus 2011-04-08 19:57:22

+3

不仅是僵尸,我相信在旧版浏览器中可以粘贴更长的文本来绕过maxlength属性。 – 2011-04-08 20:00:59

1

这是你应该仍然验证服务器端的东西,即使客户端几乎总是会支持它。围绕最大长度非常容易--Firefox开发人员工具栏包含“删除最大长度”选项,或者可以非常容易地手动编辑请求。我几乎认为过去你可以通过使用剪切和粘贴(例如,浏览器不会让你输入更多的字符,但是如果你粘贴了一个超过5个字符的值,会输入所有的),但我不记得具体哪个浏览器,我看到...

3

所有浏览器支持maxlength。但是,可以使用DOM方法或使用Firefox的Web Developer Toolbar轻松地删除/更改此属性。

3

我收到的几封电子邮件显示用户创建了超过4个字符的密码。

这怎么可能?是否有浏览器不支持maxlength?

我会调查与这些用户活动相关的USER_AGENT和REFERER标头。也许恶意用户通过编程的方式提交表格来规避浏览器的限制,只是为了检查你的外围防御。如果是这样,你应该看到一些模式。

无论如何,除了这些受过教育的猜测,maxlength不应被视为保障输入的手段。客户端的任何东西都不在您的控制之下,它的存在仅仅是为了让用户界面更直观,更具交互性。您应该始终检查服务器上的所有内容。在这种情况下,PIN由4位数字组成,否则拒绝输入。黄金法则是将所有用户输入视为敌对行为,并在服务器上进行彻底验证。

3

一般来说,试图强制用户输入完成客户端的规则是一个坏主意。我有过一些经验,我们已经将一些工作外包给了一些程序员,他们对用户输入进行清理的想法使得用户在任何给定字段中都不能输入超过10个字符。一个快速的萤火虫变化,哦,看,我可以删除一些最小的SQL注入服务器的数据库。

如果我是你,我会检查最大长度与任何脚本添加用户信息到您的数据库和返回表单验证错误,如果用户输入超过最大指定长度。