GVKun编程网logo

替换asp.net中的撇号以防止SQL错误(.net 替换字符串)

13

最近很多小伙伴都在问替换asp.net中的撇号以防止SQL错误和.net替换字符串这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展.net防止sql注入、asp防止SQL注入代码、

最近很多小伙伴都在问替换asp.net中的撇号以防止SQL错误.net 替换字符串这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展.net 防止sql注入、asp 防止SQL注入代码、asp.net 360通用防护代码,防止sql注入与xss跨站漏洞攻击、ASP.NET MVC 5使用Filter过滤Action参数防止sql注入等相关知识,下面开始了哦!

本文目录一览:

替换asp.net中的撇号以防止SQL错误(.net 替换字符串)

替换asp.net中的撇号以防止SQL错误(.net 替换字符串)

我有一个带有Name字段的Web表单,我希望它能够接受单撇号,例如名称O’Leary,但是当尝试将此记录推送到SQL
2005服务器时,出现错误。我的问题不是这个。这就是当我尝试使用此语句将记录插入到数据库中时…

Dim acctName As String = Replace(txtName.Text,"'","''")

我在数据库中得到了O’‘Leary,而不是O’Leary。认为SQL应该将这些双单撇号视为一个撇号???

.net 防止sql注入

.net 防止sql注入

 public class SqlCheck  
{  
    public SqlCheck()  
    {  
        //  
        // TODO: 在此处添加构造函数逻辑  
        //     
    }  
 
      
    public SqlConnection oconn()  
    {  
        SqlConnection conn = new SqlConnection();  
        conn.ConnectionString = ConfigurationManager.ConnectionStrings["StudyConnectionString"].ToString();  
        //第1种调用的方法   JK1986_CheckSql();  
        JK1986_CheckSql();  
        if ( conn.State == ConnectionState.Closed  )   
        {  
            conn.Open();  
        }  
        return conn;  
    }  
 
 
    public DataTable  getsource(string getds)   
    {  
        SqlConnection conn = oconn();  
        SqlDataAdapter da = new SqlDataAdapter(getds, conn);  
        DataSet ds = new DataSet();  
        da.Fill(ds,"news" );  
        return ds.Tables["news"];  
    }  
      
 
    public static  void JK1986_CheckSql()  
    {  
        string jk1986_sql = "exec↓select↓drop↓alter↓exists↓union↓and↓or↓xor↓order↓mid↓asc↓execute↓xp_cmdshell↓insert↓update↓delete↓join↓declare↓char↓sp_oacreate↓wscript.shell↓xp_regwrite↓''↓;↓--";  
        string[] jk_sql = jk1986_sql.Split(''↓'');  
        foreach (string jk in jk_sql)  
        {  
            // -----------------------防 Post 注入-----------------------  
            if ( System.Web.HttpContext.Current.Request.Form != null)  
            {  
                for (int k = 0; k < System.Web.HttpContext.Current.Request.Form.Count; k++)  
                {  
                    string getsqlkey = System.Web.HttpContext.Current.Request.Form.Keys[k];  
                    string getip;  
                    if (System.Web.HttpContext.Current.Request.Form[getsqlkey].ToLower().Contains(jk) == true)  
                    {  
                       System.Web.HttpContext.Current.Response.Write("<script Language=JavaScript>alert(''ASP.NET( C#版本 )防注入程序提示您,请勿提交非法字符!↓\\n\\nBlog:http://hi.baidu.com/ahhacker86
\\n\\nBy:aa && JK1986'');</" + "script>");  
                       System.Web.HttpContext.Current.Response.Write("非法操作!系统做了如下记录 ↓" + "<br>");  
                       if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)  
                        {  
                            getip = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];  
                        }  
                        else 
                        {  
                            getip = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];  
                        }  
                        System.Web.HttpContext.Current.Response.Write("操 作 I  P :" + getip + "<br>");  
                        System.Web.HttpContext.Current.Response.Write("操 作 时 间:" + DateTime.Now.ToString() + "<br>");  
                        System.Web.HttpContext.Current.Response.Write("操 作 页 面:" + System.Web.HttpContext.Current.Request.ServerVariables["URL"] + "<br>");  
                        System.Web.HttpContext.Current.Response.Write("提 交 方 式:P O S T " + "<br>");  
                        System.Web.HttpContext.Current.Response.Write("提 交 参 数:" + jk + "<br>");  
                        System.Web.HttpContext.Current.Response.Write("提 交 数 据:" + System.Web.HttpContext.Current.Request.Form[getsqlkey].ToLower() + "<br>");  
                        System.Web.HttpContext.Current.Response.End();  
                    }  
                }  
            }  
            // -----------------------防 GET 注入-----------------------  
            if (System.Web.HttpContext.Current.Request.QueryString != null)  
            {  
                for (int k = 0; k < System.Web.HttpContext.Current.Request.QueryString.Count; k++)  
                {  
                    string getsqlkey = System.Web.HttpContext.Current.Request.QueryString.Keys[k];  
                    string getip;  
                    if (System.Web.HttpContext.Current.Request.QueryString[getsqlkey].ToLower().Contains(jk) == true)  
                    {  
                        System.Web.HttpContext.Current.Response.Write("<script Language=JavaScript>alert(''ASP.NET( C#版本 )防注入程序提示您,请勿提交非法字符!↓\\n\\nBlog:http://hi.baidu.com/ahhacker86
\\n\\nBy:aa && JK1986'');</" + "script>");  
                        System.Web.HttpContext.Current.Response.Write("非法操作!系统做了如下记录 ↓" + "<br>");  
                        if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)  
                        {  
                            getip = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];  
                        }  
                        else 
                        {  
                            getip = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];  
                        }  
                        System.Web.HttpContext.Current.Response.Write("操 作 I  P :" + getip + "<br>");  
                        System.Web.HttpContext.Current.Response.Write("操 作 时 间:" + DateTime.Now.ToString() + "<br>");  
                        System.Web.HttpContext.Current.Response.Write("操 作 页 面:" + System.Web.HttpContext.Current.Request.ServerVariables["URL"] + "<br>");  
                        System.Web.HttpContext.Current.Response.Write("提 交 方 式:G E T " + "<br>");  
                        System.Web.HttpContext.Current.Response.Write("提 交 参 数:" + jk + "<br>");  
                        System.Web.HttpContext.Current.Response.Write("提 交 数 据:" + System.Web.HttpContext.Current.Request.QueryString[getsqlkey].ToLower() + "<br>");  
                        System.Web.HttpContext.Current.Response.End();  
                    }  
                }  
            }  
 
            // -----------------------防 Cookies 注入-----------------------  
            if (System.Web.HttpContext.Current.Request.Cookies != null)  
            {  
                for (int k = 0; k < System.Web.HttpContext.Current.Request.Cookies.Count; k++)  
                {  
                    string getsqlkey = System.Web.HttpContext.Current.Request.Cookies.Keys[k];  
                    string getip;  
                    if (System.Web.HttpContext.Current.Request.Cookies[getsqlkey].Value.ToLower().Contains(jk) == true)  
                    {  
                        System.Web.HttpContext.Current.Response.Write("<script Language=JavaScript>alert(''ASP.NET( C#版本 )防注入程序提示您,请勿提交非法字符!↓\\n\\nBlog:http://hi.baidu.com/ahhacker86
\\n\\nBy:aa && JK1986'');</" + "script>");  
                        System.Web.HttpContext.Current.Response.Write("非法操作!系统做了如下记录 ↓" + "<br>");  
                        if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)  
                        {  
                            getip = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];  
                        }  
                        else 
                        {  
                            getip = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];  
                        }  
                        System.Web.HttpContext.Current.Response.Write("操 作 I  P :" + getip + "<br>");  
                        System.Web.HttpContext.Current.Response.Write("操 作 时 间:" + DateTime.Now.ToString() + "<br>");  
                        System.Web.HttpContext.Current.Response.Write("操 作 页 面:" + System.Web.HttpContext.Current.Request.ServerVariables["URL"] + "<br>");  
                        System.Web.HttpContext.Current.Response.Write("提 交 方 式: Cookies " + "<br>");  
                        System.Web.HttpContext.Current.Response.Write("提 交 参 数:" + jk + "<br>");  
                        System.Web.HttpContext.Current.Response.Write("提 交 数 据:" + System.Web.HttpContext.Current.Request.Cookies[getsqlkey].Value.ToLower() + "<br>");  
                        System.Web.HttpContext.Current.Response.End();  
                    }  
                }  
            }  
 
        }  
    }       
      
}

 

 

来源于:www.hackbadboy.com B.B.S.T 信息安全团队 BadBoy网络安全小组


原文链接: http://blog.csdn.net/mypc2010/article/details/7044999

asp 防止SQL注入代码

asp 防止SQL注入代码

把下面代码复制到每个文件头部就可以防止SQL注入了,写程序安全最重要 :)

<%
Dim Fy_Url,Fy_a,Fy_x,Fy_Cs(),Fy_Cl,Fy_Ts,Fy_Zx
''---定义部份 头------
Fy_Cl = 1    ''处理方式:1=提示信息,2=转向页面,3=先提示再转向
Fy_Zx = "Error.Asp"  ''出错时转向的页面
''---定义部份 尾------

On Error Resume Next
Fy_Url=Request.ServerVariables("QUERY_STRING")
Fy_a=split(Fy_Url,"&")
redim Fy_Cs(ubound(Fy_a))
On Error Resume Next
for Fy_x=0 to ubound(Fy_a)
Fy_Cs(Fy_x) = left(Fy_a(Fy_x),instr(Fy_a(Fy_x),"=")-1)
Next
For Fy_x=0 to ubound(Fy_Cs)
If Fy_Cs(Fy_x)<>"" Then
If Instr(LCase(Request(Fy_Cs(Fy_x))),"''")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"and")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"select")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"update")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"chr")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"delete%20from")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),";")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"insert")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"mid")<>0 Or Instr(LCase(Request(Fy_Cs(Fy_x))),"master.")<>0 Then
Select Case Fy_Cl
 Case "1"
Response.Write "<Script Language=JavaScript>alert('' 出现错误!参数 "&Fy_Cs(Fy_x)&" 的值中包含非法字符串!\n\n 请不要在参数中出现:;,and,select,update,insert,delete,chr 等非法字符!\n\n你想干吗!不要做无聊的事情!谢谢!'');window.close();</Script>"
 Case "2"
Response.Write "<Script Language=JavaScript>location.href=''"&Fy_Zx&"''</Script>"
 Case "3"
Response.Write "<Script Language=JavaScript>alert('' 出现错误!参数 "&Fy_Cs(Fy_x)&"的值中包含非法字符串!\n\n 请不要在参数中出现:;,and,select,update,insert,delete,chr 等非法字符!\n\n你想干吗!不要做无聊的事情!谢谢!'');location.href=''"&Fy_Zx&"'';</Script>"
End Select
Response.End
End If
End If
Next
%>
您可能感兴趣的文章:
  • PHP中防止SQL注入实现代码
  • php中防止SQL注入的最佳解决方法
  • php防止SQL注入详解及防范
  • discuz的php防止sql注入函数
  • PHP中防止SQL注入攻击和XSS攻击的两个简单方法
  • 防止xss和sql注入:JS特殊字符过滤正则
  • c#.net全站防止SQL注入类的代码
  • asp.net 防止SQL注入攻击
  • 输入值/表单提交参数过滤有效防止sql注入的方法
  • 有效防止SQL注入的5种方法总结

asp.net 360通用防护代码,防止sql注入与xss跨站漏洞攻击

asp.net 360通用防护代码,防止sql注入与xss跨站漏洞攻击

总结

以上是小编为你收集整理的asp.net 360通用防护代码,防止sql注入与xss跨站漏洞攻击全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

ASP.NET MVC 5使用Filter过滤Action参数防止sql注入

ASP.NET MVC 5使用Filter过滤Action参数防止sql注入

在开发程序的过程中,稍微不注意就会隐含有sql注入的危险。今天我就来说下,ASP.NET mvc 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁。不用每下地方对参数的值都进行检查,看是用户输入的内容是否有危险的sql。如果每个地方都要加有几个缺点:

1、工作量大

2、容易遗漏

3、不容易维护

下面我通过写一个过滤防止sql的特性类,对Action执行前对Action的参数进行处理,如果有其值有sql语句,就会这些非法字符替换为空字符串。

一、sql注入的例子:

上面的输入有两个输入框,用户可以输入任何的值,包括有sql注入的值。

后台代码:

AdminController.cs

复制代码
public class AdminController : Controller
    {
        public ActionResult Index(string name = "", string loginName = "", int page = 1)
        {
            ViewBag.Name = name;
            ViewBag.LoginName = loginName;
            var r = DAdmin.GetList(name, loginName, page, 2);
            return View(r);
        }
    }
}
复制代码

DAdmin.cs:

复制代码
public class DAdmin
{
    public static PageDataView<MSys_Admin> GetList(string name, string loginName, int page,int pageSize=10)
    {
        PageCriteria criteria = new PageCriteria();
        criteria.Condition = "1=1";
        if (!string.IsNullOrEmpty(name))
            criteria.Condition += string.Format(" and Name like ''%{0}%''", name);
        if (!string.IsNullOrEmpty(loginName))
            criteria.Condition += string.Format(" and LoginName like ''%{0}%''", loginName);
        criteria.CurrentPage = page;
        criteria.Fields = "*";
        criteria.PageSize = pageSize;
        criteria.TableName = "Sys_Admin a";
        criteria.PrimaryKey = "UID";
        var r = Common.GetPageData<MSys_Admin>(criteria);
        return r;
    }
}
复制代码

上面对用户输入的name和loginName两个参数没有判断是否有sql注入的非法字符,就直接拼接到sql语句,到数据库中执行,这样是非常危险的。

1、比如用户在name输入这样的内容:

%''--%

这样拼接出来的sql语句就成了

SELECT * FROM Sys_Admin WHERE Name like ''%''--%''

这样“--”是sql的注释标记后面再拼接的sql语句都当成注释了,这样有效的就成了这样的sql语句:

SELECT * FROM Sys_Admin WHERE Name like ''%''

这表示显示全部的记录。如果是登录的sql就会跳过用户名、密码的验证。 

2、如果用户name输入内容带有insert或delete或者drop,比如:

namer人值为:%'';DELETE FROM Sys_Admin--%

拼接成的sql成了:

SELECT * FROM Sys_Admin WHERE Name like ''%'';DELETE FROM Sys_Admin--%''

这样一执行就把Sys_Admin表的记录全部删除了。

总结:上面可以看到这种sql注入是多么的危险。

二、解决MVC sql注入方案

1、定义一个防止sql注入的字符串辅助类

复制代码
{
    public static string FilterSql(string s)
    {
        if (string.IsNullOrEmpty(s)) return string.Empty;
        s = s.Trim().ToLower();
        s = ClearScript(s);
        s = s.Replace("=", "");
        s = s.Replace("''", "");
        s = s.Replace(";", "");
        s = s.Replace(" or ", "");
        s = s.Replace("select", "");
        s = s.Replace("update", "");
        s = s.Replace("insert", "");
        s = s.Replace("delete", "");
        s = s.Replace("declare", "");
        s = s.Replace("exec", "");
        s = s.Replace("drop", "");
        s = s.Replace("create", "");
        s = s.Replace("%", "");
        s = s.Replace("--", "");
        return s;
    }
}
复制代码

这个类对上面sql相关的字符串都替换掉。

2、定义一个用来检查并处理Action参数的特性类

复制代码
public class AntiSqlInjectAttribute:FilterAttribute,IActionFilter
{
    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
        
    }
 
    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var actionParameters = filterContext.ActionDescriptor.GetParameters();
        foreach (var p in actionParameters)
        {
            if (p.ParameterType == typeof(string))
            {
                if (filterContext.ActionParameters[p.ParameterName] != null)
                {
                    filterContext.ActionParameters[p.ParameterName] = StringHelper.FilterSql(filterContext.ActionParameters[p.ParameterName].ToString());
                }
            }
        }
    }
}
复制代码

说明:这个特性类是继承了类FilterAttribute和实现了接口IActionFilter,这里在方法OnActionExecuting处理Action的参数,OnActionExecuting是在Action执行之前运行的方法,而OnActionExecuted是在Action执行之后运行的方法。

p.ParameterType == typeof(string)

因为sql注入只有参数类型为字符串的时候才有可能所以这里只对Action参数为字符串的参数进行处理。

filterContext.ActionParameters[p.ParameterName] = 
StringHelper.FilterSql(filterContext.ActionParameters[p.ParameterName].ToString());
是用过滤之后的安全的Action参数值替换原来的原始值。

3、防止sql注入特性类的在MVC的Controller中的使用

复制代码
public class AdminController : Controller
{
    [AntiSqlInject]
    public ActionResult Index(string name = "", string loginName = "", int page = 1)
    {
        ViewBag.Name = name;
        ViewBag.LoginName = loginName;
        var r = DAdmin.GetList(name, loginName, page, 2);
        return View(r);
    }
}
复制代码

需要对Action的参数进行sql检查,只用在前面加上,上面定义的特性类AntiSqlInject。这个特性类可以用在任何的需要防止sql注入的Action上,根本不用对手动的去过滤程序中获取到的所有参数,安全、方便简洁

我们今天的关于替换asp.net中的撇号以防止SQL错误.net 替换字符串的分享已经告一段落,感谢您的关注,如果您想了解更多关于.net 防止sql注入、asp 防止SQL注入代码、asp.net 360通用防护代码,防止sql注入与xss跨站漏洞攻击、ASP.NET MVC 5使用Filter过滤Action参数防止sql注入的相关信息,请在本站查询。

本文标签: