### .NET过滤用户输入的关键字、敏感字符等数据 在Web开发中,处理用户输入时进行数据过滤是一项至关重要的安全措施。它可以帮助防止诸如SQL注入、XSS攻击等常见的安全威胁。本文将详细介绍如何在.NET环境中实现对用户输入的数据进行过滤,确保应用程序的安全性和稳定性。 #### 关键概念介绍 1. **正则表达式(Regular Expression)**:一种强大的文本匹配工具,用于模式匹配和字符串操作。在本例中,正则表达式被用来识别并替换特定的字符串模式。 2. **HTML标签与实体**:HTML文档中的标签如`<script>`、`<div>`等以及特殊字符如`&`, `<`, `>`, `"`, `'`等在HTML中具有特殊含义。如果不进行适当的过滤,可能会导致恶意代码执行或显示错误。 3. **SQL关键字**:SQL语言中的一些保留字如`SELECT`, `INSERT`, `DELETE`, `DROP TABLE`等,如果这些关键字出现在用户的输入中且未经处理就直接用于SQL查询语句,可能会引发SQL注入攻击。 4. **脚本代码**:内联的JavaScript或其他脚本代码如果未经过滤直接嵌入到HTML页面中,可能会导致跨站脚本(XSS)攻击。 #### 实现细节 在.NET中实现用户输入过滤通常涉及以下几个步骤: 1. **初始化过滤函数**:首先定义一个函数,如上面示例中的`NoHTML`方法,用于接收用户输入的字符串作为参数,并返回经过过滤的字符串。 2. **使用正则表达式过滤**: - **删除脚本标签**:通过正则表达式`<script[^>]*?>.*?</script>`来识别并移除所有的`<script>`标签及其内部的内容。 - **删除HTML标签**:使用`<(.[^>]*)>`来匹配所有HTML标签,并用空字符串替换它们,从而达到移除的目的。 - **处理特殊字符和HTML实体**:通过一系列的正则表达式,将HTML实体转换为对应的字符,例如`&(quot|#34);`转换为双引号`"`。 3. **过滤SQL关键字**:通过添加更多的正则表达式来识别并移除潜在的SQL注入关键字,如`xp_cmdshell`, `select`, `insert`, `deletefrom`, `count''`, `droptable`, `truncate`等。 4. **返回处理后的字符串**:经过上述处理后,返回最终的、已过滤的字符串。 #### 示例代码详解 ```csharp public string NoHTML(string Htmlstring) { if (Htmlstring == null) { return ""; } else { // 删除脚本 Htmlstring = Regex.Replace(Htmlstring, @"<script[^>]*?>.*?</script>", "", RegexOptions.IgnoreCase); // 删除HTML Htmlstring = Regex.Replace(Htmlstring, @"<(.[^>]*)>", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"-->", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"<!--.*", "", RegexOptions.IgnoreCase); // 转换HTML实体 Htmlstring = Regex.Replace(Htmlstring, @"&(quot|#34);", "\"", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(amp|#38);", "&", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(lt|#60);", "<", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(gt|#62);", ">", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(nbsp|#160);", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(iexcl|#161);", "/xa1", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(cent|#162);", "/xa2", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(pound|#163);", "/xa3", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&(copy|#169);", "/xa9", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, @"&#(\d+);", "", RegexOptions.IgnoreCase); // 删除与数据库相关的词 Htmlstring = Regex.Replace(Htmlstring, "xp_cmdshell", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "select", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "insert", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "deletefrom", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "count''", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "droptable", "", RegexOptions.IgnoreCase); Htmlstring = Regex.Replace(Htmlstring, "truncate", "", RegexOptions.IgnoreCase); return Htmlstring; } } ``` ### 结论 通过上述方法,我们可以有效地过滤掉用户输入中的敏感字符和关键字,提高Web应用的安全性。然而值得注意的是,这种方法虽然有效,但并不能完全避免所有的安全漏洞。开发者还应该结合其他安全策略和技术,如输入验证、输出编码等,以构建更加安全可靠的Web应用程序。




























/// 过滤标记
/// </summary>
/// <param name="NoHTML">包括HTML,脚本,数据库关键字,特殊字符的源码 </param>
/// <returns>已经去除标记后的文字</returns>
public string NoHTML(string Htmlstring)
{
if (Htmlstring == null)
{
return "";
}
else
{
//删除脚本
Htmlstring = Regex.Replace(Htmlstring, @"<script[^>]*?>.*?</script>", "", RegexOptions.IgnoreCase);
//删除HTML
Htmlstring = Regex.Replace(Htmlstring, @"<(.[^>]*)>", "", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"([/r/n])[/s]+", "", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"-->", "", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"<!--.*", "", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(quot|#34);", "\"", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(amp|#38);", "&", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(lt|#60);", "<", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(gt|#62);", ">", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(nbsp|#160);", " ", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(iexcl|#161);", "/xa1", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(cent|#162);", "/xa2", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(pound|#163);", "/xa3", RegexOptions.IgnoreCase);
Htmlstring = Regex.Replace(Htmlstring, @"&(copy|#169);", "/xa9", RegexOptions.IgnoreCase);

- zhaoyang_hao2018-09-10还可以吧,不是特别齐
- qq_250618052016-10-07总运行不起来,好好学习下
- haby02152016-03-05一般吧,一个文档,说的也不是很清楚,但是可以参考下

- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 大数据时代下审计工作的变革与影响.docx
- 李文景Flash的引导层动画制作课件.ppt
- 微指令实现模型机 硬布线实现模型机. Course design of computer composition in SDU implementation on Quartus II (山东大学计算
- 百万公众网络学习工程.docx
- 职业学院计算机教学的相关方法探究.docx
- 软件工程师KPI表.xls
- 传媒类实验室信息化建设的设计与实践学位.doc
- 基于大学校园网的网络课堂教学模式的研究-远程教育论文.docx
- 施工项目管理条例.doc
- 大学生网络使用及舆情认知情况调研分析.docx
- 大数据背景下机场旅客的特征浅析.docx
- 数字集群移动通信网络体制分析.docx
- 计算机技术在数字监控系统中的应用分析.docx
- 《基于网络平台的高中生日语自主学习方式探究》课题初探.docx
- 网络与计算中心服务器(虚拟机)申请表.doc
- 中国光磁通信元器件行业竞争态势及进入壁垒.docx


