1

Community Server の古いバージョンを実行していたドメインを引き継ぎました。言うまでもなく、ボットは穴を見つけようとして私にスパムを送信しています。

System.Web.HttpRequest.ValidateInputIfRequiredByConfig()が起動される前に、IP ブロック全体をブロックしたいと思います。私IHttpModuleが試したことがありますが、HealthMonitoring が例外をキャッチしているため、後で呼び出されると思います。モジュールは次のとおりです。

 public class IpBlockerModule : IHttpModule
{
    private static readonly string[] Hacks = new[]
                                                 {
                                                     "60.169.73.",
                                                     "60.169.75.",
                                                     "61.160.232.",
                                                     "61.160.207.",
                                                     "92.85.161."
                                                 };

    public void Dispose()
    {

    }

    public void Init(HttpApplication context)
    {
        context.BeginRequest += (Application_BeginRequest);
    }

    private void Application_BeginRequest(object source, EventArgs e)
    {
        var context = ((HttpApplication) source).Context;
        var ipAddress = context.Request.UserHostAddress;

        if (!IsHackIpAddress(ipAddress))
        {
            context.Response.StatusCode = 403; // (Forbidden)
        }
    }

    private static bool IsHackIpAddress(string ip)
    {
        if (ip == null) return true;

        return Hacks.Any(x => x.StartsWith(ip));
    }
}

関連する web.config セクション:

<system.web>
    <httpModules>
      <add name="IpBlockerModule" type="MyNameSpace.IpBlockerModule" />
    </httpModules>    
</system.web>

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" >
      <add name="IpBlockerModule" type="MyNameSpace.IpBlockerModule" preCondition="" />
    </modules>   
</system.webServer>

この背後にある理由は、私の受信トレイがすべての

A potentially dangerous Request.Path value was detected from the
client

 A potentially dangerous Request.Form value was detected from the client

通知。私のモジュールに何か問題がありますか、それともモジュールが事後まで起動されないと仮定するのは正しいですか?

4

2 に答える 2

4

代替ソリューションとして、IIS に作業を任せることを検討しましたか? このようにして、リクエストがアプリケーションに到達することはありません。これは web.config を介して行うことができます。プロセスの詳細を説明した記事がここにあります。次の例は、その記事から直接コピーされ<system.webServer>、web.config のセクション内に配置されます。

<security>
    <ipSecurity allowUnlisted="true">    <!-- this line allows everybody, except those listed below -->            
       <clear/>     <!-- removes all upstream restrictions -->                
       <add ipAddress="83.116.19.53"/>     <!-- blocks the specific IP of 83.116.19.53  -->                
       <add ipAddress="83.116.119.0" subnetMask="255.255.255.0"/>     <!--blocks network 83.116.119.0 to 83.116.119.255-->                
       <add ipAddress="83.116.0.0" subnetMask="255.255.0.0"/>     <!--blocks network 83.116.0.0 to 83.116.255.255-->                
       <add ipAddress="83.0.0.0" subnetMask="255.0.0.0"/>     <!--blocks entire /8 network of 83.0.0.0 to 83.255.255.255-->                
   </ipSecurity>
</security>
于 2012-06-26T15:22:52.000 に答える
0

また、IP アドレスを取得してログに記録する機能を追加して、スパム行為のあるものだけを識別してブロックすることもできます。

IP アドレスを取得する C# コードを次に示します。

string ipadd;
ipadd = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (ipadd == "" || ipaddress == null)
    ipadd = Request.ServerVariables["REMOTE_ADDR"];

上記の回答のリンクが無効になっていることに気付いたので、こちらの詳細な記事を使用してください

于 2020-03-11T11:33:50.747 に答える