14. 客户端和服务端校验的必要性
我们会在客户端进行必要的验证,不仅增加数据的准确性也减少了数据流量,但客户端的验证可靠吗?
我们做个网页,在网页中放一个textbox和button,当用户点击button时,我们判断textbox 中我拉输入的值的大小,大于100则不给出提示,小于等于100则提示正常。
在asp.net中,button有个onclientclick属性(不是事件),它响应的操作是在客户端进行的,它另有个onclick事件是在服务端完成的,
以下为它的关键源代码:
<asp:Button ID="Button4" runat="server" onclick="Button4_Click" Text="输入数值不能大于100" OnClientClick="var value=document.getElementById('TextBox1').value;if (value>100){alert('输入的值不能大于100');return false;}" />
它的onclick事件为(msg是一个label,用来显示信息):
protected void Button4_Click(object sender, EventArgs e) { //int i = Convert.ToInt32(TextBox1.Text);
msg.Text = "输入的值符合条件."; }
此时我们浏览页面,当输入 的值大于100时会弹出窗口提示并不会请求页面,此时是正常的。
我们把浏览器的js禁用下,然后再运行输入大于100的值,这时并不会弹出窗口,用户可以顺利的执行下一步的操作。
这时把服务端也加强控制即服务端校验,如下源码:
protected void Button4_Click(object sender, EventArgs e) { int i = Convert.ToInt32(TextBox1.Text); if (i > 100) { msg.Text = "不能输入大于100的数据"; } else msg.Text = "输入的值符合条件."; }
这时再提交网页,你会发现即使浏览器不能正常验证,但服务端却成功校验了。
因此在做校验时客户端和服务端都要进行安全校验,这两者一个都不能少,客户端校验只是方便用户,但可以绕过浏览器不进行正常校验,服务端是最终校验。
Asp.net的Validation就是在客户端和服务端都 进行检验的类。