【发布时间】:2011-08-01 18:54:57
【问题描述】:
我公司的网站上有一个竞赛报名页面。为了参加比赛,您需要创建一个登录名,该登录名只是一封电子邮件和一个 4 位数的密码。这是 PIN 字段:
<input type="password" name="contest_pin" id="contest_pin" maxlength="4" />
当用户提交表单时,该帐户会在我们的数据库中创建,然后他们会收到一封包含他们创建的电子邮件地址和 PIN 码的电子邮件(我已复制到该电子邮件)。
问题出在:在我测试过的所有浏览器(Mac 上的 Safari/Chrome/Firefox、Linux 上的 Chrome/Firefox、Windows 上的 IE7/8/9)中,我无法在该 PIN 字段中输入超过 4 位数字。然而,我收到的几封电子邮件显示,用户创建了一个超过 4 个字符的 pin。
这怎么可能?是否有不支持 maxlength 的浏览器?我没有在 Opera 或任何移动浏览器上测试过。如果他们的密码长于 4 位数字,这不是什么大不了的事;数据库将接受更多。我只是想知道他们是如何设法绕过 maxlength 的。
编辑添加
有太多的答案基本上都在说同样的话,我无法单独回复所有这些。我知道我应该始终对任何重要的事情进行服务器端验证,并且我们确实有 PHP 代码来清理我们的数据,如果它非常重要,我也会让 PHP 代码强制执行 4 位限制。它们只有 4 个字符对我们来说并不重要,所以我没有强制执行。我只是想知道为什么 maxlength 属性没有做它的设计,这是防止用户输入超过一定数量的字符。对于那些建议使用恶意脚本或 Firebug 的人,我可以 100% 确定情况并非如此。只有我们网站的注册用户(仅限于非常具体的企业会员列表)才能进入竞赛条目页面,我可以保证该列表上的大约 100 人中没有一个人会故意试图规避输入类型属性。
【问题讨论】:
-
与我在这里遇到的问题完全相同,我知道 max-length 很容易规避,但对于那些不想克服任何障碍的用户来说呢?我唯一能想到的就是克里斯所说的,那就是在某些浏览器上复制和粘贴时不起作用。只有一个例子是 IE,如果你在文本区域有属性 maxlength,那么你可以在里面粘贴超过 maxlength 的文本。输入不是这种情况。但可能在其他浏览器上。我不知道为什么人们会在别针上粘贴。如果你知道它是怎么发生的,请告诉我。
-
当您添加了 type="number" 属性时,maxlength="x" 在 MAC 上不起作用(尝试使用 chrome 和 firefox):)
-
@MindaugasBernatavičius,那是因为您需要为
type=number使用max和min或range属性。 -
这是一个很好的问题。我们有一个内部站点(因此没有机器人或恶意用户可以绕过
maxlength),我需要 maxlength 以方便工作。例如,一个特定的数据库字段设置为最大长度 100(即字符变化 (100))。所以maxlength=100设置在输入元素上。 然而,有时输入元素允许103或101个字符溜过,后端抛出异常。这是烦恼。我想知道为什么有时允许输入长度超过最大长度几个额外的字符;看起来像一个错误。 -
我刚刚发现了 INPUT 元素的问题,它在数据库后端允许比
maxlength略多一点。 maxlength attribute “指定最大字符数(在 Unicode 代码点中)”。因此,例如,如果输入了单个 2 字节 Unicode 代码点(例如乘号 (\u00D7)),则对于输入的最大长度将计为 1,而对于数据库字符长度则计为 2 (假设 SQL_ASCII 编码)。