是否仅使用javascript验证表单并阻止用户提交禁用JS的表单?
我正在尝试为我的网站创建一个经过验证的注册表单,目前正在编写一个用于实践的演示。我能够使用javascript验证表单。然而,我在某个地方读到,表单应该在客户端和服务器端都进行验证,因为JS可以被禁用。我想知道,如果所有javascript验证都不满意(我注意到eBay在其注册表中使用了类似的方法),是否有一种方法可以简单地禁用submit按钮?如果是,我将如何实现这一点 这就是我目前的处境:是否仅使用javascript验证表单并阻止用户提交禁用JS的表单?,javascript,Javascript,我正在尝试为我的网站创建一个经过验证的注册表单,目前正在编写一个用于实践的演示。我能够使用javascript验证表单。然而,我在某个地方读到,表单应该在客户端和服务器端都进行验证,因为JS可以被禁用。我想知道,如果所有javascript验证都不满意(我注意到eBay在其注册表中使用了类似的方法),是否有一种方法可以简单地禁用submit按钮?如果是,我将如何实现这一点 这就是我目前的处境: <script type="text/javascript"> function vali
<script type="text/javascript">
function validateEmail(email) {
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
if(re.test(email)) {
document.getElementById('result').innerHTML = '<img src="http://iconlet.com/icons/kensaunders/4/CheckMark.png" style="width:15px;"/> Valid';
} else {
document.getElementById('result').innerHTML = '<img src="http://biglistbigsales.com/m/templates/GPT/images/x_xMarkRed4.png" style="width:15px;"/> Invalid';
}
}
function validatePass(pass){
if(pass.length < 6){
document.getElementById('pass-result').innerHTML='<img src="http://biglistbigsales.com/m/templates/GPT/images/x_xMarkRed4.png" style="width:15px;"/>Your password must be at least 6 characters';
}else{
document.getElementById('pass-result').innerHTML='<img src="http://iconlet.com/icons/kensaunders/4/CheckMark.png" style="width:15px;"/>valid';
}
}
function validateCPass(cpass){
var pass = document.getElementById('pass').value;
if(cpass != pass){
document.getElementById('cpass-result').innerHTML="Passwords must match";
}else{
document.getElementById('cpass-result').innerHTML='<img src="http://iconlet.com/icons/kensaunders/4/CheckMark.png" style="width:15px;"/>';
}
}
</script>
</head>
<body>
<form action="practice.php" method="post">
e-mail:<br/><input id="email" type="text" onblur="validateEmail(this.value)" /><span id="result"></span>
<br/><br/>Password:<br/><input type="password" id="pass" onblur="validatePass(this.value)"><span id="pass-result"> </span>
<br/><br/>Confirm Password:<br/><input type="password" id="confpass" onblur="validateCPass(this.value)"> <span id="cpass-result"></span>
<br/><input type="submit">
</form>
</body>
功能验证邮件(电子邮件){
变量re=/^([^()[\]\\,;:\s@\“]+(\.[^()[\]\,;:\s@\“]+)*)(\'+\”)(\[[0-9{1,3}.[0-9]{1,3}.[0-9]{0-9]{1,3}.[1,3}.[0-9]{1,3}])){124;([a-zA Z-0-9]+-zA 2]/];
如果(重新测试(电子邮件)){
document.getElementById('result')。innerHTML='Valid';
}否则{
document.getElementById('result')。innerHTML='Invalid';
}
}
函数validatePass(通过){
如果(通过长度<6){
document.getElementById('pass-result')。innerHTML='您的密码必须至少包含6个字符';
}否则{
document.getElementById('pass-result')。innerHTML='valid';
}
}
函数ValidatePass(cpass){
var pass=document.getElementById('pass')。值;
如果(cpass!=通过){
document.getElementById('cpass-result').innerHTML=“密码必须匹配”;
}否则{
document.getElementById('cpass-result')。innerHTML='';
}
}
电子邮件:
密码:
确认密码:
不,这是不可能的,原因有很多:
- 可访问性。您客户的浏览器可能不支持Javascript,或者用户可能已禁用它(是的,有些人会)
- 安全性。web应用程序向整个internet公开HTTP接口。您甚至不需要浏览器来发送HTTP请求!因此,您的后端需要将任何HTTP请求视为不受信任的请求并对其进行验证。这适用于所有来自不可靠源的数据
始终进行服务器端验证。:/p>在服务器中检查内容的原因是恶意用户可以向服务器手动发送crafter POST或GET请求,而不管这些表单是否存在于应用程序中或是否在浏览器中被禁用。仅禁用表单不足以解决此问题
如果你仍然想在非JS浏览器中禁用表单,你可以做的是在默认情况下禁用它们并在JS上启用它们。你不需要重新发明轮子。有很多工具可以使用JavaScript进行验证。例如,检查jQuery验证插件;你可以用几行代码验证表单 关于服务器端验证,您应该始终在服务器上验证您的数据。JavaScript验证旨在防止用户错误,但它们根本不会为您的系统提供任何安全性