0

可能重复:
JavaScript:客户端与服务器端验证

我是 PHP Web 应用程序开发的初学者。我最近开发了一个用于 Intranet 的 Web 应用程序,大约有25 个用户在使用该系统。系统中的所有 HTML 表单都使用 JavaScript 和 jQuery 库进行验证,并且客户端机器支持 JavaScript。是否需要再次验证服务器上的每个表单,还是 JavaScript 验证就足够了。

4

6 回答 6

3

简单来说,JS 验证是不够的。用户可以很容易地在其客户端上禁用 JS,并绕过您的验证。即使您使用 AJAX 提交用户数据(因此需要启用 JS),聪明的用户也可以轻松地向您的服务器构建自己的 HTTP 请求,再次绕过您的验证。

为此,如果您想完全确保输入系统的所有数据都经过验证,则必须在服务器上完成。

于 2012-10-15T17:16:45.037 回答
1

由于可以关闭 Javascript,因此从逻辑上可以得出客户端不可信。因此,您将不得不在服务器端再次验证。

对于这样的问题要记住的基本规则:

客户端安全不是。

于 2012-10-15T17:15:13.150 回答
1

Javascript 验证是不够的。使用 curl 等软件绕过客户端 JS 验证以生成您自己的 HTTP POST 请求是微不足道的。

于 2012-10-15T17:15:48.690 回答
1

我想这取决于提交的数据会发生什么,但我认为出于安全原因在服务器端验证输入始终是一个好习惯。

于 2012-10-15T17:15:49.780 回答
1

试试这个,最好最简单。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
 <script src="http://code.jquery.com/jquery-latest.js"></script>
  <script type="text/javascript" src="http://jzaefferer.github.com/jquery-validation/jquery.validate.js"></script>
<style type="text/css">
* { font-family: Verdana; font-size: 96%; }
label { width: 10em; float: left; }
label.error { float: none; color: red; padding-left: .5em; vertical-align: top; }
p { clear: both; }
.submit { margin-left: 12em; }
em { font-weight: bold; padding-right: 1em; vertical-align: top; }
</style>
 <script>
  $(document).ready(function(){
  $("#commentForm").validate();
  });
  </script>

</head>
<body>


 <form class="cmxform" id="commentForm" method="get" action="">
 <fieldset>
   <legend>A simple comment form with submit validation and default messages</legend>
  <p>
 <label for="cname">Name</label>
 <em>*</em><input id="cname" name="name" size="25" class="required" minlength="2" />
  </p>
  <p>
    <label for="cemail">E-Mail</label>
  <em>*</em><input id="cemail" name="email" size="25"  class="required email" />
  </p>
  <p>
 <label for="curl">URL</label>
 <em>  </em><input id="curl" name="url" size="25"  class="url" value="" />
  </p>
  <p>
    <label for="ccomment">Your comment</label>
    <em>*</em><textarea id="ccomment" name="comment" cols="22"  class="required">      </textarea>
  </p>
   <p>
    <input class="submit" type="submit" value="Submit"/>
   </p>
 </fieldset>
 </form>
 </body>
 </html>

编码快乐!!

于 2012-10-16T12:30:48.030 回答
0

是的,您应该验证服务器端的所有数据。Javascript 验证是不可信的。

于 2012-10-15T17:16:03.610 回答