zoukankan      html  css  js  c++  java
  • .net防止数据注入

    把以下代码放入global.asax
            protected void Application_BeginRequest(Object sender, EventArgs e)
            
    {
                StartProcessRequest();
            }
            private void StartProcessRequest()
            
    {
                
    try
                
    {
                    
    string sqlErrorPage = "Error.aspx";//转向的错误提示页面 
                    if (System.Web.HttpContext.Current.Request.QueryString != null)
                    
    {

                        
    string url = Request.Url.ToString();
                        
    if (!ProcessSqlStr(url))
                        
    {
                            Response.Redirect(sqlErrorPage);
                        }


                    }

                    
    if (System.Web.HttpContext.Current.Request.Form != null)
                    
    {
                            System.Collections.Specialized.NameObjectCollectionBase.KeysCollection getkeys 
    = System.Web.HttpContext.Current.Request.Form.Keys;
                        
                            
    for (int j = 0; j < getkeys.Count; j++)
                            
    {
                                
                                
    if (getkeys[j] == "__VIEWSTATE"continue;
                                
    if (!ProcessSqlStr(System.Web.HttpContext.Current.Request.Form[getkeys[j]]))
                                
    {
                                    System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage);
                                    System.Web.HttpContext.Current.Response.End();
                                }


                            }

                    }

                }

                
    catch
                
    {
                    
    // 错误处理: 处理用户提交信息! 
                }

            }

            
    private bool ProcessSqlStr(string Str)
            
    {
                
    bool ReturnValue = true;
                
    try
                
    {
                    
    if (Str.Trim() != "")
                    
    {
                        
    string SqlStr = "and¦exec¦insert¦select¦delete¦update¦count¦*¦chr¦mid¦master¦truncate¦char¦declare";

                        
    string[] anySqlStr = SqlStr.Split('¦');
                        
    foreach (string ss in anySqlStr)
                        
    {
                            
    if (Str.ToLower().IndexOf(ss) >= 0)
                            
    {
                                ReturnValue 
    = false;
                                
    break;
                            }

                        }

                    }

                }

                
    catch
                
    {
                    ReturnValue 
    = false;
                }

                
    return ReturnValue;
            }
  • 相关阅读:
    安利一波这12个IDEA插件,太香了!
    作为Java新手,如何才能快速的看透一个Java项目?
    为什么放弃Hibernate、JPA、Mybatis,最终选择JDBCTemplate
    为什么 ConcurrentHashMap 的读操作不需要加锁?
    MySQL索引的使用是怎么样的?5个点轻松掌握!
    掌握MyBatis插件原理轻松写出自己的PageHelper分页插件
    Spring中BeanFactory与FactoryBean到底有什么区别?
    MongoDB学习笔记(一)——Windows 下安装MongoDB
    ASP.Net WebAPI中添加helppage帮助页面
    C#代码实现在控制台输入密码显示星号
  • 原文地址:https://www.cnblogs.com/weichuo/p/1205891.html
Copyright © 2011-2022 走看看