惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
V
Vulnerabilities – Threatpost
Security Latest
Security Latest
T
Threatpost
L
Lohrmann on Cybersecurity
Know Your Adversary
Know Your Adversary
Cyberwarzone
Cyberwarzone
S
Securelist
A
Arctic Wolf
W
WeLiveSecurity
Help Net Security
Help Net Security
Last Week in AI
Last Week in AI
H
Hacker News: Front Page
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
博客园_首页
NISL@THU
NISL@THU
N
News and Events Feed by Topic
博客园 - 【当耐特】
S
Schneier on Security
阮一峰的网络日志
阮一峰的网络日志
Cloudbric
Cloudbric
P
Privacy International News Feed
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
宝玉的分享
宝玉的分享
Latest news
Latest news
美团技术团队
T
The Exploit Database - CXSecurity.com
S
Security Affairs
月光博客
月光博客
M
MIT News - Artificial intelligence
GbyAI
GbyAI
D
Docker
IT之家
IT之家
PCI Perspectives
PCI Perspectives
Application and Cybersecurity Blog
Application and Cybersecurity Blog
K
Kaspersky official blog
WordPress大学
WordPress大学
V2EX - 技术
V2EX - 技术
L
LINUX DO - 最新话题
P
Proofpoint News Feed
Google Online Security Blog
Google Online Security Blog
C
CERT Recently Published Vulnerability Notes
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
Cyber Attacks, Cyber Crime and Cyber Security
J
Java Code Geeks
I
InfoQ

博客园 - 飞得更高

MPI并行编程系列之五:图的单源最短路径算法 MPI并行编程系列之四:KMP算法及并行化 MPI并行编程系列三:并行正则采样排序PSRS MPI并行编程系列 MPI并行编程系列二:快速排序 MPI并行编程系列一:枚举排序 c#基础(一)之内存管理 用Windows Live Writer 首发Blog 一个被我长期忽略的一个问题:验证控件与Button的OnClientClick事件 远程数据自动导入的设计与实现 LINQ TO SQL 复杂查询之Queries with local collections are not supported linq下数据库接口的定义和实现(linq to SQL) sql 常用函数总结 验证控件失效,求助解决方案 js浮点运算bug的解决办法 从页面的生命周期事件到页面基类(PageBase类)的编写 c# 委托实例 回车与服务器控件Button的Click事件 javascript:Web页面中的所有控件清空 - 飞得更高 - 博客园
面对恶意操作,勇敢说不------定制服务器端验证器
飞得更高 · 2008-11-19 · via 博客园 - 飞得更高

一、事件   

    几乎在所有的系统中,为了保证数据库中数据的规范,在保存数据库的时候都会做数据规范性的验证。比如,某一项不能为空,邮箱必须符合规则等。这种验证有客户端验证和服务器端验证,对于正常的操作,客户端验证就足够了。但是,对于恶意操作,仅仅是客户端验证是远远不够的,因为这些恶意操作会绕过客户端验证,这样我们数据库的数据就会失去意义。因为我们必须加上严格的服务器端验证。

二、响应事件   

    我要的服务器端验证器,必须实现以下两个功能:

  1. 能够任意添加验证条件。
  2. 当验证失败时,抛出异常,并给出正确的异常信息。

     有了这个需求,就可以定制自己的服务端验证器了。

     首先,我们需要三个类:Validater,ValidateResult,和ValidateFailException.主要功能如下:

  1. Validater是我们的验证器,实现功能添加验证条件和验证,并返回验证结果(ValidateResult)。
  2. ValidateResult是验证结果,判断验证是否成功,并返回验证结果信息。
  3. ValidateFailException定制异常,抛出我们希望的异常。

三、实现事件

    分别实现这三个类, 代码如下:

    Validater类:

Code

    ValidateResult类: 

Code

   ValidateFailException

Code

四、应用

    首先虚拟一个环境,要保存一个人的姓名和工资,且两者都不能为空。假设已经绕过客户端验证,直接执行服务器端验证。当为空时,抛出异常。

    我们定义一个Entity类,这个类实现的功能就是保存和验证。Person类继承预Entity类。

    首先Entity类

Code

   Person类

Code

   写一个页面,当点击Button时,触发验证操作。

   页面代码:

Code

   后台代码:

Code

    当点击页面的按钮时,就会触发验证操作,抛出如下异常:

验证失败:
名称不能为空
工资不能为空

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: Comman.validate.ValidateFailExcetion: 验证失败:
名称不能为空
工资不能为空

五、完成

   这样就完成了一个服务器端验证器,实现了严格的验证,保证数据库数据的规范。