网站安全通用防护代码(C#版本源码提供)

news/2024/5/10 22:28:26/文章来源:https://blog.csdn.net/weixin_30649641/article/details/98050860

每一个开发者都会意识到,网站发布之前,需要进行安全检查。

那么如何拦截攻击者注入恶意代码?如何防御诸如跨站脚本攻击(XSS)、SQL注入攻击等恶意攻击行为?

针对目前常见的一些安全问题,结合目前一些常见的防护办法,通用权限管理系统底层增加了安全防护代码,

现将源码提供如下

namespace DotNet.Utilities
{/// <summary>/// 网站安全通用防护/// /// 主要功能:///          拦截攻击者注入恶意代码,可以防御诸如跨站脚本攻击(XSS)、SQL注入攻击等恶意攻击行为。/// /// 修改纪录/// /// 2013-12-27,更新正则表达式避免误报问题。/// 2013-01-08,更新了aspx防护脚本中referer变量冲突问题。/// 2013-01-09,加入了UTF7编码XSS的防护。/// 2013-01-28,增强了对XSS的防护。/// 2013-01-31,针对某些用户后台上传文件出错的问题。/// 2013-03-15,增强了对POST的防护。/// 2013-03-28,增强了对XSS的防护。/// 2013-04-25,对XSS防护加入了通用的防护方法。/// 2013-08-02,加入对XSS编码绕过的防护。/// 2013-08-14,增强利用样式的XSS防护。/// 2014-11-12,解决SQL盲注不拦截的问题。/// /// 2014-11-12 版本:1.0 SongBiao 创建文件。   /// /// <author>///     <name>SongBiao</name>///     <date>2014-11-12</date>/// </author>/// </summary>public partial class SecretUtil{//正则过滤字符private const string StrRegex = @"<[^>]+?style=[\w]+?:expression\(|\b(alert|confirm|prompt)\b|^\+/v(8|9)|<[^>]*?=[^>]*?&#[^>]*?>|\b(and|or)\b.{1,6}?(=|>|<|\bin\b|\blike\b)|/\*.+?\*/|<\s*script\b|<\s*img\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)";/// <summary>///  POST请求/// </summary>/// <param name="putData">输出非法字符串</param>/// <returns></returns>public static bool PostData(out string putData){bool result = false;putData = string.Empty;for (int i = 0; i < HttpContext.Current.Request.Form.Count; i++){result = CheckData(HttpContext.Current.Request.Form[i].ToString(), out putData);if (result){putData = HttpContext.Current.Request.Form[i].ToString();break;}}return result;}/// <summary>/// GET请求/// </summary>/// <param name="putData">输出非法字符串</param>/// <returns></returns>public static bool GetData(out string putData){bool result = false;putData = string.Empty;for (int i = 0; i < HttpContext.Current.Request.QueryString.Count; i++){result = CheckData(HttpContext.Current.Request.QueryString[i].ToString(), out putData);if (result){putData = HttpContext.Current.Request.QueryString[i].ToString();break;}}return result;}/// <summary>/// COOKIE/// </summary>/// <param name="putData">输出非法字符串</param>/// <returns></returns>public static bool CookieData(out string putData){bool result = false;putData = string.Empty;for (int i = 0; i < HttpContext.Current.Request.Cookies.Count; i++){result = CheckData(HttpContext.Current.Request.Cookies[i].Value.ToLower(), out putData);if (result){putData = HttpContext.Current.Request.Cookies[i].Value.ToLower();break;}}return result;}/// <summary>/// UrlReferrer请求来源/// </summary>/// <param name="putData">输出非法字符串</param>/// <returns></returns>public static bool Referer(out string putData){bool result = false;result = CheckData(HttpContext.Current.Request.UrlReferrer.ToString(), out putData);if (result){putData = HttpContext.Current.Request.UrlReferrer.ToString();}return result;}/// <summary>/// 正则检查/// </summary>/// <param name="inputData">字符串</param>/// <param name="putData">输出非法字符串</param>/// <returns></returns>public static bool CheckData(string inputData, out string putData){putData = string.Empty;//if (Regex.IsMatch(inputData.ToUpper(), StrRegex.ToUpper(),RegexOptions.IgnoreCase))if (Regex.IsMatch(inputData, StrRegex, RegexOptions.IgnoreCase)){putData = inputData;return true;}else{return false;}}}}

源码在通用权限底层中的位置:

调用方法:(ASP.NET MVC参考)在Global.asax文件中增加以下方法

 

        /// <summary>/// 在此处进行安全检测和防范/// Application_BeginRequest/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void Application_AcquireRequestState(object sender, EventArgs e){HttpContext context = HttpContext.Current;string putData = string.Empty;if (Request.Cookies != null){if (SecretUtil.CookieData(out putData)){ResponseWarnMessage(context, "Cookie数据有恶意字符!", putData);}}if (Request.UrlReferrer != null){if (SecretUtil.Referer(out putData)){ResponseWarnMessage(context, "Referrer数据有恶意字符!", putData);}}if (Request.RequestType.ToUpper() == "POST"){if (SecretUtil.PostData(out putData)){ResponseWarnMessage(context, "Post数据有恶意字符!", putData);}}if (Request.RequestType.ToUpper() == "GET"){if (SecretUtil.GetData(out putData)){ResponseWarnMessage(context, "Get数据有恶意字符!", putData);}}}/// <summary>/// 非安全行为 输出警告信息/// </summary>/// <param name="errorMessage"></param>/// <param name="putData"></param>private void ResponseWarnMessage(HttpContext context, string errorMessage, string putData){//记录一下恶意攻击行为string ipAddress = Utilities.GetIPAddress(true);BaseUserInfo userInfo = context.Session[DotNet.Business.Utilities.SessionName] as BaseUserInfo;//非安全行为同时记录到数据库和文本文件中LogHelper.OracleWarn(userInfo, "恶意访问行为", "来自IP:" + ipAddress + "的访问存在恶意行为:" + errorMessage + "字符内容:" + putData, " private void ResponseErrorMessage(string errorMessage, string putData)", typeof(MvcApplication), null);RouteData routeData = new RouteData();routeData.Values.Add("controller", "Error");routeData.Values.Add("action", "General");routeData.Values.Add("title", "非法访问与请求提醒");routeData.Values.Add("error", "你提交的" + errorMessage + "字符内容:" + putData);IController errorController = new ErrorController();errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));context.Response.End();}

 

上面的处理方法可根据需要自己调整,我是将攻击信息使用系统的日志功能记录到Oracle数据库中,并在页面显示攻击信息,

测试:在地址后加入"?action=delete from user"

 

以上安全代码也可单独放到你的程序中使用,建议尚未做安全防护的朋友尽快加上,避免受到一些常见的攻击行为骚扰。

 

转载于:https://www.cnblogs.com/hnsongbiao/p/4257368.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_813716.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站策划方案写作、演示标准

一份成功的网站策划方案是赢得订单的重要砝码&#xff0c;如何写一份令客户心动的网站策划方案则需要下苦功夫。《网站策划方案写作、演示标准》主要分为7个部分&#xff0c;希望对您有帮助&#xff1a;1. 网站策划方案的价值——内容重点阐述了解决方案能给客户带来什么价值&a…

网站策划方案写作、演示标准

一份成功的网站策划方案是赢得订单的重要砝码&#xff0c;如何写一份令客户心动的网站策划方案则需要下苦功夫。《网站策划方案写作、演示标准》主要分为7个部分&#xff0c;希望对您有帮助&#xff1a;1. 网站策划方案的价值——内容重点阐述了解决方案能给客户带来什么价值&a…

理解 Ajax 及其工作原理,构建网站的一种有效方法

理解 Ajax 及其工作原理&#xff0c;构建网站的一种有效方法 Ajax 由 HTML、JavaScript™ 技术、DHTML 和 DOM 组成&#xff0c;这一杰出的方法可以将笨拙的 Web 界面转化成交互性的 Ajax 应用程序。本文的作者是一位 Ajax 专家&#xff0c;他演示了这些技术如何协同工作 —— …

Android技术开发 必备网站及使用工具

【前言】工欲善其事&#xff0c;必先利其器。搞开发多年了&#xff0c;会收藏一些干货网站和工具&#xff0c;辅助开发&#xff0c;提高开发效率。下面一次性分享给大家。喜欢的朋友们点个赞吧。 说明&#xff1a;这些是我收藏的网站&#xff0c;感觉还是不错的&#xff0c;仅仅…

webgis本地部署之在IIS6,7中部署ASP.NET网站

阅读目录 开始查看web.config文件在IIS中创建网站IIS6 添加扩展名映射IIS6 无扩展名的映射目录的写入权限SQL SERVER的配置在IIS7中部署ASP.NET程序80端口和域名 在我的第一篇博客中&#xff0c;我发布过一个示例项目&#xff0c; 主要演示了我的我的AJAX框架和我的通用数据访问…

从外网访问内网本机的网站实现方法

这是一个比较古老的话题了。一般懂得搭建网站的朋友&#xff0c;应该都会有分享自己小站的冲动。一来可以展示自己的作品&#xff0c;二来也可以方便别人看看网站&#xff0c;提提意见。呵呵。 鉴于网上类似的详细教程真的很少&#xff0c;也许是问题太简单了吧。但仍然有不少…

关于12306网站图形验证码的猜想

以前一直以为12306的图形验证码是根据普通验证码识别规则&#xff0c;只不过是加上了变态的不清晰低像素图片而已。 然后F12查看了一下网络请求&#xff0c;它的验证码规则&#xff0c;远远不是我之前我想的那么简单的。 很久以前一直单纯的以为&#xff0c;可以通过图片的识别…

linux查看网站内容,linux如何查看文件有多少行内容_网站服务器运行维护

如何查看linux系统是多少位的_网站服务器运行维护查看linux操作系统位数的方法&#xff1a;1、执行【uname -a】命令&#xff0c;如果输出i686&#xff0c;表示操作系统是32位的&#xff0c;如果输出x86_64&#xff0c;表示操作系统是64位的&#xff1b;2、执行【file /lib/sys…

linux 安装软件_介绍一个linux各软件安装教程网站linuxize

前言相信有很多开发者安装linux系统软件时都会根据不同的发行版本去百度不同软件的安装步骤&#xff0c;但有时候可能会出现读者根据博主的安装步骤进行却出现了无法安装成功的情况&#xff0c;其实我作为一名读者有时也会出现这样的情况&#xff0c;一般都会再去参考其它文章对…

企业网站 源码 服务邮箱:_企业邮箱服务有哪些?外贸公司邮箱申请哪个好?

公司购买企业邮箱&#xff0c;免不了对比&#xff0c;评判一个企业邮箱的标准也是多维度的。企业邮箱服务有哪些&#xff1f;外贸公司邮箱申请哪个好呢&#xff1f;常见的企业邮箱包括网易企业邮箱、TOM企业邮箱、腾讯企业邮箱等。企业邮箱登录入口&#xff1a;好用的企业邮箱功…

把接口调用打成jar包的类怎么写_如何实时主动监控你的网站接口是否挂掉并及时报警...

“ 阅读本文大概需要 10 分钟。 ”最近我在公司负责的业务已经正式投入上线了&#xff0c;既然是线上环境&#xff0c;那么就需要保证其可用性。我负责的业务其中就包括一个 Web Service&#xff0c;我需要保证 Service 的每个接口都是可用的&#xff0c;如果某个时间流量大了或…

php织梦导航被选中,PHP网站分类目录程序 网址导航程序 织梦二次开发

织梦二次开发的PHP网站分类目录程序介绍&#xff1a;现在网络上很多的网站分类目录都是ASP格式&#xff0c;唯一一个PHP的程序因为文章功能和可扩展性太弱&#xff0c;小菜考虑到自己一个网站运营需要类似程序&#xff0c;而考虑到织梦程序的大众性和易优化性&#xff0c;就花2…

通州网站服务器,用光明为黄城根小学通州校区照亮希望

2019年8月1日&#xff0c;由北京住总集团承建的北京城市副中心职工周转房北区二标六号地块即黄城根小学通州校区&#xff0c;顺利通过五方验收&#xff0c;确保了九月入学条件。黄城根小学通州校区位于城市副中心职工周转房北区院内&#xff0c;是按照北京城市副中心整体规划部…

vue第一次加载慢怎么优化_Vue 网站首页加载优化

Vue 网站首页加载优化本篇主要讲解 Vue项目打包后 vendor.js 文件很大 如何对它进行优化 以及开启Vue的压缩 和 nginx gzip 压缩的使用&#xff0c;其他就是对接口优化等1. vendor.js 优化由于Vue项目随着功能变多 依赖也会随之变多&#xff0c;减少vendor.js的主要方法就是将其…

win7 iis安装php mysql_WIN7下配置IIS7.5+PHP5.3+MySQL动态网站服务器环境

比APPPSERV傻瓜建站包操作更简便、更智能、更科学的建站方法声明&#xff1a;采用环境及各软件版本&#xff0c;以下软件均采用当前最新版1.操作系统Windows7 英文旗舰版&#xff0c;自带IIS7.5&#xff1b;2.PHP软件版本&#xff1a;php-5.3.2-nts-Win32-VC9-x86.msi&#xff…

thinkphp5项目--企业单车网站(三)

thinkphp5项目--企业单车网站&#xff08;三&#xff09; 项目地址 fry404006308/BicycleEnterpriseWebsite: Bicycle Enterprise Websitehttps://github.com/fry404006308/BicycleEnterpriseWebsite 一、动态查询 thinkphp支持动态查询&#xff0c;这就很方便了&#xff0c;可…

【网站前端】第02章 HTML常用标签

一、标题标签<h1> - <h6> &#xff08;重要&#xff09; 1、例&#xff1a;<h1> 我是一级标题 </h1> 2、语义&#xff1a;作为标题使用&#xff0c;并且依据重要性递减。 二、段落标签&#xff08;重要&#xff09; 1、例&#xff1a;<p> 我…

DotNetCore 结合 Nginx 将网站部署到阿里云

基础环境配置 域名和服务器请先自行购买 基于 云服务器ECS 创建一个应用实例&#xff0c;选择系统镜像为 Ubuntu 16.04&#xff0c;在本机通过 SSH 进行远程连接&#xff0c;并进行相关配置 ssh roothttp://39.108.48.203/...sudo apt-get update sudp apt-get upgrade sudo ap…

html点击按钮跳转到另一个界面_点击查看本周SEO功能优化

SEO是搜索引擎优化&#xff0c;是利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名。目的是让网站在行业内占据领先地位&#xff0c;获得品牌收益。本周快站针对SEO功能进行了若干优化&#xff0c;现在您可以一键检测您的网站哪里需要进行SEO优化。SEO功能更新使用场景&a…

php记录网站访问,PHP简单实现记录网站访问量功能示例

本文实例讲述了PHP简单实现记录网站访问量功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;tongji/index.php文件&#xff1a;$file dirname(__FILE__)./tongji.db;//$data unserialize(file_get_contents($file));$fpfopen($file,r);$content;if (flock($fp,LOC…