2

我的网站上有一个注册表单,我有 3 个出生日期输入框,其中的编码如下......

<input name="dd" id="dd" type="text" value="DD" size="2" />
<input name="mm" id="mm" type="text" value="MM" size="2" />
<input name="yyyy" id="yyyy" type="text" value="YYYY" size="4" />

然后我有一个在提交时运行的 JavaScript 验证页面。此页面检查字段是否不为空,并且它们是否在某个数字之间,例如在 1 到 31 之间表示 Day
这是“dd”字段的 JavaScript...

var nulld=document.forms["create"]["dd"].value;
if (nulld==null || nulld=="")
  {
  alert("Please enter a day between 1 and 31");
  return false;
  }
var dd=document.forms["create"]["dd"].value;
if (dd >= 1 && dd <= 31)
  {}else{
  alert("Please enter a day between 1 and 31");
  return false;
  }

所以我有这段代码,但 iv 注意到有人在这台计算机上禁用了 JavaScript,并且正在创建大量包含不正确数据的帐户。我该如何阻止这种情况发生?或者是添加检查JavaScript是否被禁用并将它们转移到这样的错误页面的代码的唯一方法......

<noscript><meta http-equiv="refresh" content="1;url=nojavascript.html"></noscript>

有没有另一种方法可以让用户在没有 JavaScript 的情况下仍然可以创建帐户但仍然具有验证?

4

3 回答 3

9

JavaScript 验证只对一件事有好处:快速让用户知道他们将要提交到服务器的数据将被拒绝。

无法控制进入系统的内容。在开始处理数据之前,您必须检查数据是否适合服务器。

于 2012-08-08T08:22:14.243 回答
7

不用担心让您的 javascript 变得比现在“更强大”,他们甚至可以在不使用浏览器的情况下发送该表单,更不用说 javascript。您必须在服务器端验证数据并在错误时拒绝它。

javascript 验证只是为那些启用了 javascript 的人提供了便利,因此他们无需向服务器发出请求即可获得快速反馈。

当您实现服务器端验证时,请考虑使其尽可能强大。例如,您的 javascript 验证通过了无效日期。

于 2012-08-08T08:22:11.917 回答
2

您必须在服务器上进行重复验证。

服务器端验证必须坚如磐石 - 并防止任何未经授权的活动,因为您可以假设用户可能是恶意的,并且可以完全控制客户端。

客户端验证只是为了方便用户而存在,对系统的安全性没有任何帮助。它可以阻止浏览器表单浪费时间从服务器获取验证。

于 2012-08-08T08:23:25.477 回答