2009-02-26 4 views
5

Tworzę witrynę opartą na forum i chcę zablokować członków, którzy wysyłają spam lub nadużycie. Myślałem o użyciu modułu HTTP, aby to zrobić, ale natknąłem się na rozszerzenie Dynamic IP Restrictions na IIS7. Zastanawiam się, czy możliwe jest dynamiczne dodawanie adresów IP z mojej aplikacji do rozszerzenia?Czy mogę programowo dodać adres IP do rozszerzenia ograniczeń dynamicznych IP w IIS7 z mojej aplikacji ASP.NET?

Ponadto, jeśli masz doświadczenie z tym rozszerzeniem, będzie to wspaniałe. Jestem esp. zainteresowani, aby dowiedzieć się, czy może to wpłynąć na wydajność w witrynie o dużym natężeniu ruchu.

Dzięki

Odpowiedz

3

ja również był zainteresowany w tym.

Najpierw używałem interfejsu użytkownika w IIS7 do czarnej listy adresów IP.

enter image description here

zrobiłem przyjrzeć link Rick Strahl wspomniano powyżej, ale znalazł wielki zasób tutaj:

http://www.iis.net/configreference/system.webserver/security/ipsecurity/add

Próbka kodu na tej stronie pokazuje, jak wykonać działanie przy użyciu C#. Oto wycinek z tej witryny

using System; 
using System.Text; 
using Microsoft.Web.Administration; 

internal static class Sample 
{ 
    private static void Main() 
    { 
     using (ServerManager serverManager = new ServerManager()) 
     { 
     Configuration config = serverManager.GetApplicationHostConfiguration(); 
     ConfigurationSection ipSecuritySection = config.GetSection("system.webServer/security/ipSecurity", "Default Web Site"); 
     ConfigurationElementCollection ipSecurityCollection = ipSecuritySection.GetCollection(); 

     ConfigurationElement addElement = ipSecurityCollection.CreateElement("add"); 
     addElement["ipAddress"] = @"192.168.100.1"; 
     addElement["allowed"] = false; 
     ipSecurityCollection.Add(addElement); 

     ConfigurationElement addElement1 = ipSecurityCollection.CreateElement("add"); 
     addElement1["ipAddress"] = @"169.254.0.0"; 
     addElement1["subnetMask"] = @"255.255.0.0"; 
     addElement1["allowed"] = false; 
     ipSecurityCollection.Add(addElement1); 

     serverManager.CommitChanges(); 
     } 
    } 
} 

Aby uzyskać pakiet Microsoft.Web.Administration w Visual Studio goto Narzędzia -> Nuget Package Manager -> Konsola Package Manager.

Następnie wpisz:

Install-Package Microsoft.Web.Administration 

Innym sposobem wykonania tego samego zadania jest użycie wiersza poleceń i polecenia appcmd.

Poniższa komenda robi to samo:

appcmd.exe set config "Default Web Site/SSM" -section:system.webServer/security/ipSecurity /+"[ipAddress='192.168.100.1',allowed='False']" /commit:apphost 

i może być wywoływana z kodu za pomocą:

string website = "Default Web Site/SSM"; 
string ipAddress = "192.168.100.1"; 
string allowDeny = "False"; 

string cmd = string.Format("%systemroot%\\system32\\inetsrv\\appcmd.exe set config \"{0}\" -section:system.webServer/security/ipSecurity /+\"[ipAddress='{1}',allowed='{2}']\" /commit:apphost", website, ipAddress, allowDeny); 
Process.Start(cmd); 

Powyższe prace polecenie, ale okazuje się, jeśli nazwać to z C# narzeka mówiąc "System nie może znaleźć określonego pliku wyjątku". Aby obejść ten problem, musisz podać nazwę użytkownika/hasło administratora.

Oto funkcja:

void BlacklistIP(string ipAddress) 
{ 
    string website = "Default Web Site/SSM"; 
    string allowDeny = "False"; 
    string domain = ""; 

    string args = string.Format(" set config \"{0}\" -section:system.webServer/security/ipSecurity /+\"[ipAddress='{1}',allowed='{2}']\" /commit:apphost", website, ipAddress, allowDeny); 

    System.Security.SecureString password = new System.Security.SecureString(); 
    password.AppendChar('y'); 
    password.AppendChar('o'); 
    password.AppendChar('u'); 
    password.AppendChar('r'); 
    password.AppendChar('p'); 
    password.AppendChar('a'); 
    password.AppendChar('s'); 
    password.AppendChar('s'); 
    password.AppendChar('w'); 
    password.AppendChar('o'); 
    password.AppendChar('r'); 
    password.AppendChar('d'); 

    Process.Start(@"C:\windows\System32\inetsrv\appcmd.exe", args, "Administrator", password, domain); 
} 

Et Voila!