仙灵女巫天赋新版本:客户端验证未通过却提交表单
来源:百度文库 编辑:高考问答 时间:2024/04/29 03:56:41
楼主要的是在客户端验证,而不是在服务器端验证。
在客户端验证一般采用的是JAVASCRIPT来做(当然也可以采用VBSCRIP或其他脚本语言,但这一切都基于客户端,而不是提交后在服务器端来验证)。。
楼主的问题,比如一下代码:
<form name="form1" method="post">
<input type="text" name="aa">
<input type="submit" value="提交" onclick="check();">
</form>
<script language="javascript">
function check()
{
if(document.form1.aa.value.length=="")
{
alert("你未输入内容,请先输入后再提交");
return false;
//这里只是做了一个最简单的检查用户是否输入了内容,如果没输入内容,则返回假,即不提交。
}
return true;
//这里是当上面的if判断不成功(即用户有输入了内容,那就提交;
}
</script>
楼主可以用我给的这段代码做参考做你的表单验证。。这一切都基于客户端,当然有些验证要用到数据库的,就要提交到服务器端了)
补充:
btok:
你想的太多了。呵呵,在客户端验证的一个重要理由就是减轻服务器的压力。。
如果说像你这样完全不采用在客户端验证的方法,只在服务器端验证就能保证安全。那么你去看看淘宝,去看看阿里巴巴,去看看腾讯,去看看网易吧。。呵呵。。如果他们也都把这些验证机制全部放到服务器端,他们再增加一倍的服务器恐怕也没用,恶意注册机想要搞定他们任何一台服务器那就是随便的事了。。
在客户端验证并不代码在服务器端就不验证了。恰恰相反,把一些检验放到客户端验证过后再提交到服务器,这样更能保证数据的准确性,同时也能减少与客户端互动的时间。。
而你所说的外部提交,想必你并没想是怎么回事吧?外部提交一般是指从外部提交数据到另外的服务器,而不是指外提交数据到客户端。你了解吗?
想想看现在还有多少人的浏览器会屏弊掉JS?你难道不知道最近热得红透了的Ajax技术?你去看看网易的163邮箱吧,呵呵,标得大大的写着:DIV+JS技术。。。
其实你可以在login.asp中加这样一句代码:RESPONSE.END(),如下:
<!--#include virtual="/Conn/Conn.asp"-->
<%
If ........... Then '验证的条件
Check_Result = "Fail"
............. '验证非法,退出
RESPONSE.END()
End If
这样就保证遇错后代码不会继续执行下去!
以你的程序为asp为例,其他语言的道理是一样的,可以类推。
<!--#include virtual="/Conn/Conn.asp"-->
<%
If ........... Then '验证的条件
............. '验证非法,退出
End If
psql="select * from Test"
rs.open psql,conn,3
rs("Test")="Ok"
rs.close
set rs=nothing
%>
你会发现不管验证是否通过,数据库里Test记录都会被赋值,也就是不管验证是否通过,后面的语句都会被执行。这是非常危险的,我以前一直没有意识到这一点,后来才发现自己是多么的愚蠢,现在的解决方法如下:
<!--#include virtual="/Conn/Conn.asp"-->
<%
If ........... Then '验证的条件
Check_Result = "Fail"
............. '验证非法,退出
End If
If Check_Result<>"Fail" Then
psql="select * from Test"
rs.open psql,conn,3
rs("Test")="Ok"
rs.close
set rs=nothing
End If
%>
通过验证给出一个返回值,通过判断返回值来决定是否运行后面的语句。这样就解决了问题。
闲人设计:在客户端用javascript做验证太危险了,可以通过外部提交、JAVASCRIPT屏蔽检测、JAVASCRIPT手动提交等至少五种方法绕过验证提交表单!而且验证方法等于摆在别人眼皮地下……碰到禁用JAVASCRIPT的我看你怎么哭……
harvey168:Response.End只会中止对客户端的输出,但服务器代码依然会被执行!!
执行顺序应该是先验证,如果验证不通过则警告,验证通过后在执行表单提交。
提交表单的时候,没有进行必要的验证~