(求救)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
关于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防注入的主要内容,如果未能解决你的问题,请参考以下文章