IIS网站日志分析系统,结合防火墙,实现反爬虫,防黑,防注入之二:【IIS筛选请求规则管理】

为过滤访客,今天给系统添加了IIS的筛选请求设置功能,也可以直接到IIS里去设置,但集成到系统中,设置更方便。在这里插入图片描述IIS请求筛选设计界面
以下为系统管理界面
在这里插入图片描述
以下为实现代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Microsoft.Web.Administration;
namespace Webfirewall.SysAdmin
{
public partial class IISdeny_rule : System.Web.UI.Page
{

    public struct rule_conut//筛选规则
    {
        public string rule_name;
        public bool rule_url;
        public bool rule_string;
      
    }
    public List<rule_conut> rule_conut_s = new List<rule_conut>();
    public rule_conut p;
    protected void Page_Load(object sender, EventArgs e)
    {

        if (Session["admin_user"] == null)
        {

            Response.Redirect("login.aspx");

        }
        if (!IsPostBack)
        {
            web_site();
        }
    }
    protected void create_rule(string website,string rule_name,bool s_Url,bool s_string,string r_Header,string ex_name,string d_string)
    {
        bool IsCreate=true ; 
        string[] u = r_Header.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
        string[] w = ex_name.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
        string[] v = d_string.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
        using (ServerManager serverManager = new ServerManager())
        {
            // 获取您想要配置请求筛选的站点或应用程序
            Configuration config = serverManager.GetWebConfiguration(website);

            // 获取请求筛选部分
            ConfigurationSection requestFilteringSection = config.GetSection("system.webServer/security/requestFiltering");

            // 获取过滤规则集合
            ConfigurationElementCollection filteringRulesCollection = requestFilteringSection.GetCollection("filteringRules");

          

            // 查找是否存在同名规则
            ConfigurationElement filteringRuleElement = null;
            foreach (ConfigurationElement ruleElement in filteringRulesCollection)
            {
                if ((string)ruleElement["name"] == rule_name) // 根据规则名称查找
                {
                    Response.Write("存在同名规则!");
                    IsCreate = false;
                    break;
                   
                }
              
            }
           
            if(IsCreate!= false){

                    // 创建一个新的过滤规则元素
                    filteringRuleElement = filteringRulesCollection.CreateElement("filteringRule");
                    // 设置过滤规则属性
                    filteringRuleElement["name"] = rule_name; // 规则名称
                    filteringRuleElement["scanUrl"] = s_Url; // 扫描URL
                    filteringRuleElement["scanQueryString"] = s_string; // 扫描查询字符串

                    // 获取扫描标头集合
                    ConfigurationElementCollection scanHeadersCollection = filteringRuleElement.GetCollection("scanHeaders");
                    for (int k = 0; k < u.Length; k++)
                    {
                        // 创建一个新的扫描标头元素
                        ConfigurationElement scanHeaderElement = scanHeadersCollection.CreateElement("add");

                        // 设置扫描标头属性
                        scanHeaderElement["requestHeader"] = u[k]; // 请求标头

                        // 将扫描标头元素添加到扫描标头集合
                        scanHeadersCollection.Add(scanHeaderElement);
                    }
                    //应用于文件扩展名
                    if (ex_name != "")
                    {
                        ConfigurationElementCollection appliesToCollection = filteringRuleElement.GetCollection("appliesTo");
                        for (int i = 0; i < w.Length; i++)
                        {
                            ConfigurationElement appliesToElement = appliesToCollection.CreateElement("add");
                            appliesToElement["fileExtension"] = w[i];
                            appliesToCollection.Add(appliesToElement);
                        }
                    }

                    // 获取拒绝字符串集合
                    ConfigurationElementCollection denyStringsCollection = filteringRuleElement.GetCollection("denyStrings");
                    for (int j = 0; j < v.Length; j++)
                    {
                        // 创建一个新的拒绝字符串元素
                        ConfigurationElement denyStringElement = denyStringsCollection.CreateElement("add");

                        // 设置拒绝字符串属性
                        denyStringElement["string"] = v[j]; // 拒绝字符串

                        // 将拒绝字符串元素添加到拒绝字符串集合
                        denyStringsCollection.Add(denyStringElement);
                    }
                    // 将过滤规则元素添加到过滤规则集合
                    filteringRulesCollection.Add(filteringRuleElement);

                    // 保存更改
                    serverManager.CommitChanges();
            }     
                
                
        }
    
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        bool[] arr_b = new bool[2];
        string[] arr_rule = new string[5];
        arr_rule[0] = DL_web_site.SelectedValue.Trim();
        arr_rule[1] = TextBox1.Text.Trim();
        arr_rule[2] = TextBox2.Text.Trim();
        arr_rule[3] = TextBox3.Text.Trim();
        arr_rule[4] = TextBox4.Text.Trim();
        arr_b[0] = CheckBox1.Checked;
        arr_b[1] = CheckBox2.Checked;
        if (Label2.Text.Trim()=="新建")
        {
        create_rule(arr_rule[0], arr_rule[1], arr_b[0],arr_b[1],arr_rule[2], arr_rule[3], arr_rule[4]);
        }
        if (Label2.Text.Trim()=="修改")
        {//删除原来的
          using (ServerManager serverManager = new ServerManager())
                {
                    // 获取您想要配置请求筛选的站点或应用程序
                    Configuration config = serverManager.GetWebConfiguration(Label1.Text.Trim());

                    // 获取请求筛选部分
                    ConfigurationSection requestFilteringSection = config.GetSection("system.webServer/security/requestFiltering");

                    // 获取规则集合
                    ConfigurationElementCollection rulesCollection = requestFilteringSection.GetCollection("filteringRules");

                    // 查找要删除的规则元素
                    ConfigurationElement ruleElement = null;
                    foreach (ConfigurationElement element in rulesCollection)
                    {
                        if ((string)element["name"] == arr_rule[1]) // 根据规则名称查找
                        {
                            ruleElement = element;
                            break;
                        }
                    }

                    // 如果找到了规则元素,就删除它
                    if (ruleElement != null)
                    {
                        rulesCollection.Remove(ruleElement);
                    }

                    // 保存更改
                    serverManager.CommitChanges();
                    edit_rule(DL_web_site.SelectedValue.Trim());
                }

          create_rule(Label1.Text.Trim(), arr_rule[1], arr_b[0], arr_b[1], arr_rule[2], arr_rule[3], arr_rule[4]); //重新创建一个规则

            Label2.Text="新建";
            TextBox1.ReadOnly = false;
        }



        edit_rule(arr_rule[0]); 
    }
    protected void web_site() 
    {
        using (ServerManager serverManager = new ServerManager())
        {
            // 获取站点集合
            SiteCollection sites = serverManager.Sites;

            // 遍历站点集合
            foreach (Site site in sites)
            {
                DL_web_site.Items.Add(site.Name);
                // 打印站点名称
               // Console.WriteLine(site.Name);
            }
        }
    
    
    }
    protected void edit_rule(string web_site) 
    {
      
        
        using (ServerManager serverManager = new ServerManager())
        {
            // 获取您想要配置请求筛选的站点或应用程序
            Configuration config = serverManager.GetWebConfiguration(web_site);

            // 获取请求筛选部分
            ConfigurationSection requestFilteringSection = config.GetSection("system.webServer/security/requestFiltering");

            // 获取过滤规则集合
            ConfigurationElementCollection filteringRulesCollection = requestFilteringSection.GetCollection("filteringRules");
      
            // 查找要修改的过滤规则元素
          //  ConfigurationElement filteringRuleElement = null;
            foreach (ConfigurationElement ruleElement in filteringRulesCollection)
            {
             
                p.rule_name = ruleElement["name"].ToString();
                p.rule_url = bool.Parse(ruleElement["scanUrl"].ToString()) ;
                p.rule_string = bool.Parse(ruleElement["scanQueryString"].ToString());

                rule_conut_s.Add(p);
             
            }
            Repeater1.DataSource = rule_conut_s;

            Repeater1.DataBind();
               
        }
    }

    protected void DL_web_site_SelectedIndexChanged(object sender, EventArgs e)
    {
        Repeater1.DataSource = null;
        edit_rule(DL_web_site.SelectedValue.Trim());
        Label1.Text =  DL_web_site.SelectedValue.Trim();
        Label2.Text = "新建";
        TextBox1.Text = "";
        TextBox2.Text = "";
        TextBox3.Text = "";
        TextBox4.Text = "";
        TextBox1.ReadOnly = false;
    }

    protected void rpt_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        string web_site = Label1.Text.Trim();//站点名称
        string rule_name;
        if (e.CommandName == "del_rule_cmd")
        {

            try
            {
                LinkButton lb = (LinkButton)Repeater1.Items[e.Item.ItemIndex].Controls[0].FindControl("del_rule");
                rule_name=lb.CommandArgument.Trim();//规则名称

                using (ServerManager serverManager = new ServerManager())
                {
                    // 获取您想要配置请求筛选的站点或应用程序
                    Configuration config = serverManager.GetWebConfiguration(web_site);

                    // 获取请求筛选部分
                    ConfigurationSection requestFilteringSection = config.GetSection("system.webServer/security/requestFiltering");

                    // 获取规则集合
                    ConfigurationElementCollection rulesCollection = requestFilteringSection.GetCollection("filteringRules");

                    // 查找要删除的规则元素
                    ConfigurationElement ruleElement = null;
                    foreach (ConfigurationElement element in rulesCollection)
                    {
                        if ((string)element["name"] == rule_name) // 根据规则名称查找
                        {
                            ruleElement = element;
                            break;
                        }
                    }

                    // 如果找到了规则元素,就删除它
                    if (ruleElement != null)
                    {
                        rulesCollection.Remove(ruleElement);
                    }

                    // 保存更改
                    serverManager.CommitChanges();
                    edit_rule(DL_web_site.SelectedValue.Trim());
                }

            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);


            }
        }
        if (e.CommandName == "IIS_rule_edit") 
        {
          
            try
            {
                LinkButton eb = (LinkButton)Repeater1.Items[e.Item.ItemIndex].Controls[0].FindControl("edit");
                rule_name = eb.CommandArgument.Trim();//规则名称
                rule_edit(web_site,rule_name);
                Label2.Text= "修改";
                TextBox1.ReadOnly =true ;
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);


            }

        }
    }

    protected void rule_edit(string web_site,string rule_name)
    {
        string[] rule_string_edit = new string[3];
        rule_string_edit[0]=string.Empty;
        rule_string_edit[1] = string.Empty;
        rule_string_edit[2] = string.Empty;
        // 连接到IIS服务器
        using (ServerManager serverManager = new ServerManager())
        {
            // 获取您想要配置请求筛选的站点或应用程序
            Configuration config = serverManager.GetWebConfiguration(web_site);

            // 获取请求筛选部分
            ConfigurationSection requestFilteringSection = config.GetSection("system.webServer/security/requestFiltering");

            // 获取过滤规则集合
            ConfigurationElementCollection filteringRulesCollection = requestFilteringSection.GetCollection("filteringRules");

            // 查找要修改的过滤规则元素
            ConfigurationElement filteringRuleElement = null;
            foreach (ConfigurationElement ruleElement in filteringRulesCollection)
            {
                if ((string)ruleElement["name"] == rule_name) // 根据规则名称查找
                {
                    filteringRuleElement = ruleElement;
                    break;
                    
                }
            }
            DL_web_site.Text= web_site;
            TextBox1.Text = rule_name;
            // 如果找到了过滤规则元素,就修改它的属性和子元素
            if (filteringRuleElement != null)
            {
                // 修改过滤规则的属性
              CheckBox1.Checked = bool.Parse(filteringRuleElement["scanUrl"].ToString()) ; // 修改扫描URL的值
              CheckBox2.Checked = bool.Parse(filteringRuleElement["scanQueryString"].ToString()); // 修改扫描查询字符串的值


                // 获取扫描标头集合
                ConfigurationElementCollection scanHeadersCollection = filteringRuleElement.GetCollection("scanHeaders");

                // 修改扫描标头的值
                foreach (ConfigurationElement scanHeaderElement in scanHeadersCollection)
                {
                    if (rule_string_edit[0] == "")
                    {
                        rule_string_edit[0] = scanHeaderElement["requestHeader"].ToString();
                    }
                    else 
                    {
                        rule_string_edit[0] = rule_string_edit[0] + "," + scanHeaderElement["requestHeader"].ToString(); 
                    }

                }
                TextBox2.Text = rule_string_edit[0];
                // 获取应用于集合
                ConfigurationElementCollection appliesToCollection = filteringRuleElement.GetCollection("appliesTo");

                // 修改应用于的值
                foreach (ConfigurationElement appliesToElement in appliesToCollection)
                {

                    if (rule_string_edit[1] == "")
                    {
                        rule_string_edit[1] = appliesToElement["fileExtension"].ToString();
                    }
                    else
                    {
                        rule_string_edit[1] = rule_string_edit[1] + "," + appliesToElement["fileExtension"].ToString();
                    }
                                        
                  
                }
                TextBox3.Text = rule_string_edit[1];
                // 获取拒绝字符串集合
                ConfigurationElementCollection denyStringsCollection = filteringRuleElement.GetCollection("denyStrings");

                // 修改拒绝字符串的值
                foreach (ConfigurationElement denyStringElement in denyStringsCollection)
                {

                    if (rule_string_edit[2] == "")
                    {
                        rule_string_edit[2] = denyStringElement["string"].ToString();
                    }
                    else
                    {
                        rule_string_edit[2] = rule_string_edit[2] + "," + denyStringElement["string"].ToString();
                    } 
             
                }
                TextBox4.Text = rule_string_edit[2];
            }

            // 保存更改
            serverManager.CommitChanges();


        }
    }
}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值