1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Web;
  5. using System.Web.Security;
  6. using System.Web.UI;
  7. using System.Web.UI.HtmlControls;
  8. using System.Web.UI.WebControls;
  9. using System.Web.UI.WebControls.WebParts;
  10. /// <summary>
  11. ///cedar 的摘要说明
  12. /// </summary>
  13. public class cedar:IHttpModule
  14. {
  15. public cedar()
  16. {
  17. //
  18. //TODO: 在此处添加构造函数逻辑
  19. //
  20. }
  21. public void Dispose()
  22. {
  23. }
  24. public void Init(HttpApplication application)
  25. {
  26. application.AcquireRequestState += new EventHandler(application_AcquireRequestState);
  27. }
  28. private void application_AcquireRequestState(object sender, EventArgs e)
  29. {
  30. HttpContext content = ((HttpApplication)sender).Context;
  31. try
  32. {
  33. string sqlErrorPage = "default.html";//转到默认页面
  34. string keyValue = string.Empty;
  35. string requestUrl = content.Request.Path.ToString();
  36. if (content.Request.QueryString != null)
  37. {
  38. foreach (string val in content.Request.QueryString)
  39. {
  40. keyValue= content.Server.UrlDecode(content.Request.QueryString[val]);
  41. if (!processSqlStr(keyValue))
  42. {
  43. content.Response.Write("您访问的页面发生错误,此问题我们已经记录并尽快改善,请稍后再试。<br><a href=""+sqlErrorPage+"" mce_href=""+sqlErrorPage+"">转到首页</a>");
  44. content.Response.End();
  45. break;
  46. }
  47. }
  48. }
  49. if (content.Request.Form != null)
  50. {
  51. foreach(string val in content.Request.Form)
  52. {
  53. keyValue = content.Server.HtmlDecode(content.Request.Form[val]);
  54. if (keyValue == "_ViEWSTATE") continue;
  55. if (!processSqlStr(keyValue))
  56. {
  57. content.Response.Write("您访问的页面发生错误,此问题我们已经记录并尽快改善,请稍后再试。");
  58. content.Response.End();
  59. break;
  60. }
  61. }
  62. }
  63. }
  64. catch (Exception ex)
  65. {
  66. }
  67. }
  68. private bool processSqlStr(string str)
  69. {
  70. bool returnValue = true;
  71. try
  72. {
  73. if (str.Trim() != "")
  74. {
  75. //取得webconfig中过滤字符串
  76. string sqlStr = ConfigurationManager.AppSettings["FilterSql"].Trim();
  77. //string sqlStr = "declare |exec|varchar |cursor |begin |open |drop |creat |select |truncate";
  78. string[] sqlStrs = sqlStr.Split('|');
  79. foreach (string ss in sqlStrs)
  80. {
  81. if (str.ToLower().IndexOf(ss) >= 0)
  82. {
  83. sqlStr = ss;
  84. returnValue = false;
  85. break;
  86. }
  87. }
  88. }
  89. }
  90. catch
  91. {
  92. returnValue = false;
  93. }
  94. return returnValue;
  95. }
  96. }
  97. 在web.config中添加以下:

    <appSettings>
      <add key="FilterSql" value="declare |exec|varchar |cursor |begin |open |drop |creat |select |truncate "/>
     </appSettings>

    <httpModules>
       <add type="cedar" name="cedar"/>
      </httpModules>

过滤网址和输入框中的特殊字符,防止sql注入的更多相关文章

  1. PHP用正则匹配字符串中的特殊字符防SQL注入

    本文出至:新太潮流网络博客 /** * [用正则匹配字符串中的特殊字符] * @E-mial wuliqiang_aa@163.com * @TIME 2017-04-07 * @WEB http:/ ...

  2. DVWA中low级的sql注入漏洞的简单复现

    第一次成功复现一个简单漏洞,于是写下这篇随笔记录一下 首先我们来看dvwa中low级的sql注入的源码 源码文件路径如下图: 源码如下: <?php if(isset($_GET['Submit ...

  3. mybatis的sql中使用$会出现sql注入示例

    mybatis的sql中使用$会出现sql注入示例: 模拟简单登录场景: 页面代码: function login(){ //sql注入 var user = { username : "' ...

  4. PHP中该怎样防止SQL注入?

    因为用户的输入可能是这样的: ? 1 value'); DROP TABLE table;-- 那么SQL查询将变成如下: ? 1 INSERT INTO `table` (`column`) VAL ...

  5. JDBC中的PreparedStatement-防止SQL注入攻击

    在JDBC对数据库进行操作的时候,SQL注入是一种常见的针对数据库的注入攻击方式.如下面的代码所演示,在我们的提交字段中掺入了SQL语句,会使得程序的登录校验失效: package org.lyk.m ...

  6. 什么是SQL注入以及mybatis中#{}为什么能防止SQL注入而${}为什么不能防止SQL注入

    1.什么是SQL注入 答:SQL注入是通过把SQL命令插入到web表单提交或通过页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL指令. 注入攻击的本质是把用户输入的数据当做代码执行. 举例如: ...

  7. SpringBoot过滤器过滤get及post请求中的XSS和SQL注入

    1.创建XssAndSqlHttpServletRequestWrapper包装器,这是实现XSS过滤的关键,在其内重写了getParameter,getParameterValues,getHead ...

  8. php过滤提交数据 防止sql注入攻击

    规则 1:绝不要信任外部数据或输入 关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据.外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据. ...

  9. 怎样取消老毛桃软件赞助商---只需在输入框中输入老毛桃官网网址“laomaotao.org”

    来源:www.laomaotao.org 时间:2015-01-29 在众多网友和赞助商的支持下,迄今为止,老毛桃u盘启动盘制作工具已经推出了多个版本.如果有用户希望取消显示老毛桃软件中的赞助商,那不 ...

随机推荐

  1. 安装 luajit && 给 luajit 安装 cjson

    安装 luajit 步骤: 从官网 http://luajit.org/download.html下载  LuaJIT-2.0.5.tar.gz 解压 tar -xzf LuaJIT-2.0.5.ta ...

  2. objectARX 关于MFC类向导 无法向此非CCmdTarget派生类添加任何命令 的解决方式

    objectARX 关于MFC类向导 无法向此非CCmdTarget派生类添加任何命令  的解决方式 图文By edata ,转载注明出处 http://www.cnblogs.com/edata 1 ...

  3. 个人KPI制定

    1.工作量 1.1 能独立完成工作优先级 1.2 能独立预估工作时间 2.工作质量 2.1 项目按时完成没有延期 2.2 交付件质量 2.2.1 测试用例设计没有明显遗漏 2.2.2 测试bug符合规 ...

  4. Github 升级到 Rails 5.2.1 了

    简评:之前用的可是 3.2,早就该升级了啊. Github 的 Rails 升级花了大约一年半的时间,这是有原因的,首先,Rails 本身的升级并不总是平滑的,有些版本有重大改变(breaking c ...

  5. Ionic2 自学须知的基本知识点

    http://www.cnblogs.com/zsl123/p/5991336.html Ionic(ionicframework)一款接近原生的HTML5移动App开发框架. IONIC 是目前最有 ...

  6. python --爬虫--爬取百度翻译

    import requestsimport json class baidufanyi: def __init__(self, trans_str): self.lang_detect_url = ' ...

  7. 总结day26 ----验证客户端的合法性,已经操作系统,进程的简单初识别

    前情提要 一:验证客户端的合法性: # .需要认证 # 程序和用户打交道的时候才会用到用户认证 # 对所有的客户端进行统一的认证 # # 我现在要做的事情 # 写一个server端 # 写一个clie ...

  8. 通过API方式查看Azure Sign-ins记录

    经确认,目前Sign-ins功能在中国区还没有开通.也没有相关的预计开通时间.您可以通过如下链接随时关注China Azure的最新公告:https://www.azure.cn/zh-cn/what ...

  9. Python文件中执行脚本注释和编码声明

    在 Python 脚本的第一行经常见到这样的注释: #!/usr/bin/env python3 或者 #!/usr/bin/python3 含义 在脚本中, 第一行以 #! 开头的代码, 在计算机行 ...

  10. 【bug】记一个有趣的“bug”

    产品经理在使用我们用户功能的是,需要查询一个用户,知道这个用户的id,我说支持模糊查询的. 他输入"余XX",点击查询,怎么都查不出这个用户. 我到用户表里确认,确实有这个ID的用 ...