我正在尝试为我的网站创建一个有效的注册表,目前正在编码它的一个演示实践。我可以使用javascript验证表单。但是,我在某处读到表单应该在客户端和服务器端都进行验证,因为JS可以被禁用。我想知道,如果所有的javascript验证都不满意(我注意到eBay在他们的注册表中使用了类似的方法),是否有一种方法可以简单地禁用提交按钮,如果是这样的话,我该如何实现呢?
这就是我到目前为止所处的位置:
<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>
发布于 2012-07-02 14:18:23
不,这是不可能的,原因有很多:
你的客户的浏览器可能不支持Javascript,或者用户可能已经禁用了它(是的,有些人do).
因此:
对于任何正确的web应用程序,服务器端验证都是必不可少的。
客户端验证是一种UI增强,它的存在是为了通过提供更快的反馈来改善用户体验。
发布于 2012-07-02 14:19:04
您可以在默认情况下禁用该按钮,然后让JavaScript重新启用它。然而,这并不能阻止用户自己重新启用它,可能使用跨站点脚本注入,或者更实际地使用FireBug或浏览器默认内置的开发人员工具之一。
我强烈建议同时使用客户端和服务器端验证,这既是为了用户体验,也是为了系统的完整性和安全性。如果你根本没有时间同时做这两件事,那么服务器端肯定是优先的。验证的客户端是一个很好的东西,旨在使它对用户更好;不幸的是,当涉及到破坏代码时,用户可能不会对您的代码有同样的感觉。
总是有服务器端的验证。:)
发布于 2012-07-02 14:19:25
在服务器中检查的原因也是恶意用户可以手动向您的服务器发送手工创建的POST或GET请求,而不管这些表单是否存在于您的应用程序中或在您的浏览器中被禁用。仅禁用表单不足以解决此问题。
但是,如果您仍然希望在非JS浏览器中禁用这些表单,那么您可以默认禁用它们,然后在JS上启用它们。
https://stackoverflow.com/questions/11295446
复制