为过滤访客,今天给系统添加了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();
}
}
}
}