【问题标题】:preventing users bypassing validation [duplicate]防止用户绕过验证[重复]
【发布时间】:2016-06-21 03:45:27
【问题描述】:

我有这样的表格:

<form id="loginForm" action="register.php" method="post" onsubmit="return validateForm();">
    <p>Register:</p>
        <p style="text-align: left;">Full name: <br><input type="text" name="name" required/></p>
        <p style="text-align: left;">Email: <br><input id="email" type="text" name="email" onkeyup="validateEmail(value);"required/></p>
      <span id="emailError" style="display:none;border:1px solid red;">Please enter a valid email</span>
        <p style="text-align: left;">Username: <br><input id="username" type="text" name="username" onkeyup="validateUsername(value);" required/></p>
        <span id="usernameError" style="display:none;border:1px solid red;">Username can only contain a-z, 0-9 and must be at least 6 characters long</span>
        <span id="usernameTaken" style="display:none;border:1px solid red;">Username taken</span>
        <p style="text-align: left;">Password: <br><input id="password" type="password" name="password" onkeyup="validatePassword(value);" required/></p>
        <span id="passwordError" style="display:none;border:1px solid red;">Password requires one lower case letter, one upper case letter, one digit,no spaces and  6-13 length</span>
        <input type="submit" value="Register">
    </form>

validateForm() 函数仅在所有字段均已验证时才返回“true”。但。

我注意到这可以通过在例如 Firefox 或 Google Chrome 中简单地“检查元素”并将“onsubmit="return validateForm();”更改为“onsubmit="true;”来绕过。即使字段尚未验证,表单也会被提交。

如何防止这种情况发生?

谢谢!

【问题讨论】:

  • 如何防止这种情况服务器端验证
  • 永远不要相信 Javascript 验证,因为它们可能会被停用......始终添加服务器端验证
  • 您通常通过在客户端和服务器上进行验证来防止绕过验证,但您无法防止在客户端绕过验证(至少不能使用有意义或值得的方法)但是如果您在服务器上尽职尽责,您就很可靠。
  • 一旦有人告诉您curl,您会完全震惊... 了解更多有关 HTTP 的信息,它是所有这一切的基础协议,不了解其客户端-服务器架构是错误的.

标签: javascript html


【解决方案1】:

您只是不想只信任 javascript 验证。您还必须在服务器上验证这一点,甚至更难。 javascript 端只是对用户的奖励,因此他们可以在发送表单后立即收到有关错误输入的通知,而不是长时间的服务器通信。

TL;DR 行为完全正常,您必须验证服务器上的输入。

【讨论】:

    【解决方案2】:

    服务器端验证。

    客户端验证对于良好的用户体验和防止不必要的服务器访问非常重要。

    但是

    客户端验证无法替代良好的服务器端验证。客户端代码(javascript)最终在用户的机器上运行,每个人都可以很容易地调整和更改它。

    【讨论】:

      猜你喜欢
      • 2012-10-03
      • 2013-08-04
      • 2014-11-25
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多