(求救)Global.asax sql防注入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(求救)Global.asax sql防注入相关的知识,希望对你有一定的参考价值。

/// <summary>
/// 当有数据提交时,触发
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void Application_BeginRequest(object sender, EventArgs e)

//遍历POST参数,隐藏域除外
foreach (string i in Request.Form)

if (i == "__VIEWSTATE") continue;
this.GoErr(this.Request.Form[i].ToString());

//遍历GET参数
foreach (string i in Request.QueryString)

this.GoErr(this.Request.QueryString[i].ToString());



/// <summary>
/// 过滤字符串
/// </summary>
/// <param name="tmd">域字符串</param>
private void GoErr(string tmd)

htmlEncode(tmd);

/// <summary>
/// SQL注入过滤
/// </summary>
/// <param name="InText">要替换的字符串</param>
/// <returns></returns>
public static string HtmlEncode(string InText)

if (InText == null || InText == "")

return "";

else

InText = InText.Replace("'", """);
return InText;


不知道为什么就是不替换字符串中的单引号
可是我的自己的啊,用的是ACCESS数据库!!

怎么实现,如果用替换的怎么实现!!!!!,我都测试好多遍,都是不管用,晕
有没有写好的,给偶模仿下
QQ252999935

如果要防注入建议你使用存储过程,调用时使用sqlparameter参数,这比你替换字符串要安全。这样是可以插入单引号的 参考技术A 不用存储过程也可以实现sqlparameter参数

关于SQL注入与防注入

SQL 注入漏洞存在的原因,就是拼接 SQL 参数。也就是将用于输入的查询参数,直接拼接在 SQL 语句中,导致了SQL 注入漏洞。

简单来说,就是别人可以通过你的语法漏洞向你的数据库随便添加数据

 

解决办法:

采用sql语句预编译和绑定变量,是防御sql注入的最佳方法

String sql = "select id, no from user where id=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setInt(1, id);
        ps.executeQuery();

  其原因就是:采用了PreparedStatement,就会将sql语句:"select id, no from user where id=?" 预先编译好,也就是SQL引擎会预先进行语法分析,产生语法树,生成执行计划,

也就是说,后面你输入的参数,无论你输入的是什么,都不会影响该sql语句的 语法结构了,因为语法分析已经完成了,而语法分析主要是分析sql命令,比如 select ,from ,where ,and, or ,order by 等等。所以即使你后面输入了这些sql命令,也不会被当成sql命令来执行了,因为这些sql命令的执行, 必须先的通过语法分析,生成执行计划,

既然语法分析已经完成,已经预编译过了,那么后面输入的参数,是绝对不可能作为sql命令来执行的,只会被当做字符串字面值参数。所以sql语句预编译可以防御sql注入。

以上是关于(求救)Global.asax sql防注入的主要内容,如果未能解决你的问题,请参考以下文章

asp.net mvc global.asax文件详解

网站SQL被注入,怎么防?

Global.asax

ASP.NET MVC中的Global.asax文件

Go语言SQL注入和防注入

sqlalchemy防sql注入