【问题标题】:How do to restrict a html form input from being passed on form submission?如何限制 html 表单输入在表单提交时传递?
【发布时间】:2015-10-18 11:29:46
【问题描述】:

我有一个简单的注册表单,其中包含以下字段:fname、lname、用户名、密码和确认密码。 提交后,表单调用处理输入的 servlet。 如何阻止确认密码字段传递给 servlet post 方法?

下面是sn-p的代码:

HTML 表单快照:

<div class="container-fluid">
<form name="UserRegistration" action="${pageContext.request.contextPath}/RegisterServlet" method="POST" onsubmit="return validateForm()">

First name:<br>
  <input type="text" name="firstname">
 <br>
Last name:<br>
  <input type="text" name="lastname">
 <br>
Username:<br>
  <input type="text" name="username">
 <br>
Password:<br>
  <input type="text" name="password">
 <br>
Confirm Password:<br>
  <input type="text" name="cpassword">
 <br><br>
<input type="submit" value="Register">
</form>

我在 javascript 表单验证中使用确认密码输入。在这一步之后我就没有用了。

JAVASCRIPT 代码片段:

 function validateForm() {
      var fname = document.forms["UserRegistration"]["firstname"].value;
      var lname = document.forms["UserRegistration"]["lastname"].value;
      var uname = document.forms["UserRegistration"]["username"].value; 
      var pass = document.forms["UserRegistration"]["password"].value; 
      var cpass = document.forms["UserRegistration"]["cpassword"].value;

      if(cpass == pass){
      if (fname == null || fname == "" || lname == null || lname == "" || 
              uname == null || uname == "" || pass == null || pass == "") {
          alert("All fields must be filled out");
          return false;
      }else
          {
              return true;
          }
      }
      else
          {
          alert("Passwords do not match")
          return false
          }
  }

【问题讨论】:

    标签: html forms post form-submit


    【解决方案1】:

    只允许 cpassword 的值与表单上的其他信息一起传输到您的 servlet。如果您的 servlet 确定密码不匹配,您可以重播表单并要求用户输入密码并确认。

    不要只依赖 JavaScript 来进行验证。始终执行服务器端验证。 如果用户在其浏览器中禁用 JavaScript 并尝试提交表单,或使用 cURL 或其他方式POST将数据发送到您的 servlet,他们可以发送无效数据。

    如果您仍然不想发送 cpassword,您可以使用 dotnetom 的方法或在执行 return true; 之前使用类似的方法删除元素

    (elem=document.getElementsByName("cpassword")[0]).parentNode.removeChild(elem);
    

    【讨论】:

      【解决方案2】:

      您可以将disabled 属性设置为true 以防止其发布。

      document.forms["UserRegistration"]["cpassword"].disabled = true;
      

      【讨论】:

      【解决方案3】:

      在提交表单之前,您可以删除确认密码字段的name属性,这样该字段将不会被提交:

      if (fname == null || fname == "" || lname == null || lname == "" || 
                uname == null || uname == "" || pass == null || pass == "") {
            alert("All fields must be filled out");
            return false;
      }else
      {
          // remove the attribute name from element cpass
          cpass.removeAttribute('name');
          return true;
      }
      

      【讨论】:

        猜你喜欢
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        • 2019-06-19
        • 2020-11-05
        • 2022-08-24
        • 1970-01-01
        • 2016-12-04
        • 1970-01-01
        相关资源
        最近更新 更多