【问题标题】:Client and Server side validation-PHP and JavaScript [duplicate]客户端和服务器端验证-PHP 和 JavaScript [重复]
【发布时间】:2012-10-05 17:23:35
【问题描述】:

可能重复:
JavaScript: client-side vs. server-side validation

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

【问题讨论】:

  • 永远不要相信用户输入。在客户端验证以避免来回服务器。在服务器上再次验证。
  • 这取决于您是否想要潜在的不稳定结果。如果是,请坚持客户端验证,如果不是,请在服务器上验证。

标签: php javascript forms validation


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    由于可以关闭Javascript,因此从逻辑上讲,客户端是不可信的。因此,您必须在服务器端再次验证。

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

    客户端安全性不是。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          试试这个,最好又简单。

          <!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>
          

          编码愉快!!

          【讨论】:

          • 这不能回答问题
          • 这对于验证来说已经足够了,我想。如果您已经使用过这样的 js 验证,则根本不需要添加服务器验证。
          • 那是垃圾。请阅读此问题的所有其他答案。
          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 2016-10-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-14
            • 1970-01-01
            相关资源
            最近更新 更多