2009-07-23 12 views
8

क्या कुछ उपयोगकर्ता एजेंटों को सीधे web.config से प्रतिबंधित करना संभव है? कुछ रोबोट robots.txt का पालन नहीं करते हैं, और व्यर्थ सर्वर लोड (और लॉग-फ़ाइल स्पैमिंग) से बचने के लिए, मैं आगे बढ़ने से अनुरोध के कुछ वर्गों (विशेष रूप से उपयोगकर्ता-एजेंट या शायद आईपी पते के आधार पर) को रोकना चाहता हूं ।उपयोगकर्ता-एजेंटों को प्रतिबंधित करने के लिए web.config का उपयोग

बोनस पॉइंट यदि आपको पता है कि ऐसे अनुरोधों को पूरी तरह से आईआईएस की लॉग-फ़ाइल में लॉग इन होने से रोकने के लिए संभव है। (यानी अगर अनुरोध-मिलान, अग्रेषित/dev/null, अगर आपको मेरा अर्थ मिलता है)।

win2003 के लिए एक समाधान बेहतर होगा, लेकिन यह एक आवर्ती समस्या है - यदि आईआईएस 7 के लिए एक साफ समाधान है लेकिन आईआईएस 6 नहीं है, तो मुझे यह जानकर खुशी होगी।

संपादित करें: क्षमा करें 'पहले अपूर्ण प्रश्न पूछें, मेरे पास टैब + गलती से दर्ज किया गया था।

उत्तर

11

यह आईआईएस 7 में URLRewrite मॉड्यूल का उपयोग करके आसानी से किया जा सकता है। लेकिन मुझे वास्तव में पता नहीं है कि यह उन अनुरोधों को लॉग इन होने से रोक देगा या नहीं।

<rewrite> 
    <rules> 
    <rule name="Ban user-agent RogueBot" stopProcessing="true"> 
     <match url=".*" /> 
     <conditions> 
     <add input="{HTTP_USER_AGENT}" pattern="RogueBotName" /> 
     <add input="{MyPrivatePages:{REQUEST_URI}}" pattern="(.+)" /> 
     </conditions> 
     <action type="AbortRequest" /> 
    </rule> 
    </rules> 
    <rewriteMaps> 
    <rewriteMap name="MyPrivatePages"> 
     <add key="/PrivatePage1.aspx" value="block" /> 
     <add key="/PrivatePage2.aspx" value="block" /> 
     <add key="/PrivatePage3.aspx" value="block" /> 
    </rewriteMap> 
    </rewriteMaps> 
</rewrite> 
+0

ठीक है, साइट इतनी छोटी है कि आईआईएस लॉग एक perf नहीं है। मुसीबत; यह ज्यादातर शोर है, मुझे टालने से कोई फर्क नहीं पड़ता - लेकिन यह समाधान बिल्कुल वही है जो मैं उम्मीद कर रहा था - कुछ कॉन्फ़िगर करने योग्य मॉड्यूल जो कुछ अनुरोधों को रोक सकता है। मैं इसे देख लूंगा, धन्यवाद! –

+0

क्या आप जानते हैं कि एकाधिक बॉट्स के लिए एक नियम बनाना संभव है? – UpTheCreek

+0

@UpTheCreek यह एक पैटर्न है, इसलिए जब तक आपके पास एक नियमित अभिव्यक्ति होती है जो उस प्रश्न में सभी बॉट्स की पहचान करता है जिन्हें आप देखना चाहते हैं, तो आप इसे वहां प्लग कर सकते हैं। मैं इसके बारे में सावधान रहूंगा, हालांकि, यदि आप सावधान नहीं हैं तो सामान्य ट्रैफिक को मारने के लिए यह थोड़ा खतरनाक लगता है। –

0

ऐसा नहीं लगता कि आप इसे web.config से कर सकते हैं (web.config में प्राधिकरण उपयोगकर्ताओं के लिए है, न कि बॉट्स)। आपकी सर्वश्रेष्ठ शर्त आईआईएस के लिए कुछ प्रकार का कस्टम आईएसएपीआई फ़िल्टर होगा। blog about this here है। सौभाग्य!

3

आप एक कस्टम एएसपी.Net HttpModule लिख सकते हैं जैसा कि मैंने अपनी साइट के लिए कुछ दुष्ट बॉट पर प्रतिबंध लगाने के लिए किया था।

public class UserAgentBasedRedirecter : IHttpModule 
{ 
    private static readonly Regex _bannedUserAgentsRegex = null; 
    private static readonly string _bannedAgentsRedirectUrl = null; 

    static UserAgentBasedRedirecter() 
    { 
      _bannedAgentsRedirectUrl = ConfigurationManager.AppSettings["UserAgentBasedRedirecter.RedirectUrl"]; 
      if (String.IsNullOrEmpty(_bannedAgentsRedirectUrl)) 
       _bannedAgentsRedirectUrl = "~/Does/Not/Exist.html"; 

      string regex = ConfigurationManager.AppSettings["UserAgentBasedRedirecter.UserAgentsRegex"]; 
      if (!String.IsNullOrEmpty(regex)) 
       _bannedUserAgentsRegex = new Regex(regex, RegexOptions.IgnoreCase | RegexOptions.Compiled); 
    } 

    #region Implementation of IHttpModule 

    public void Init(HttpApplication context) 
    { 
      context.PreRequestHandlerExecute += RedirectMatchedUserAgents; 
    } 

    private static void RedirectMatchedUserAgents(object sender, System.EventArgs e) 
    { 
      HttpApplication app = sender as HttpApplication; 

      if (_bannedUserAgentsRegex != null && 
       app != null && app.Request != null && !String.IsNullOrEmpty(app.Request.UserAgent)) 
      { 
       if (_bannedUserAgentsRegex.Match(app.Request.UserAgent).Success) 
       { 
        app.Response.Redirect(_bannedAgentsRedirectUrl); 
       } 
      } 
    } 

    public void Dispose() 
    { } 

    #endregion 
} 

आप web.config में यह रजिस्टर और नियमित अभिव्यक्ति निर्दिष्ट करने के लिए उपयोगकर्ता एजेंट स्ट्रिंग मिलान करने के लिए उपयोग करना होगा: यहाँ कोड है। यहां एक है जिसे मैं msnbot/1.1 यातायात पर प्रतिबंध लगाने के लिए उपयोग करता था:

<configuration> 
    <appSettings> 
     <add key="UserAgentBasedRedirecter.UserAgentsRegex" value="^msnbot/1.1" /> 
    </appSettings> 
... 
    <system.web> 
     <httpModules> 
      <add name="UserAgentBasedRedirecter" type="Andies.Web.Traffic.UserAgentBasedRedirecter, Andies.Web" /> 
     </httpModules> 
    </system.web> 
</configuration> 
+0

यह वही दिखता है जो मैं ढूंढ रहा था :-) धन्यवाद! क्या आपको पता है कि क्या यह अनुरोध लॉग होने से रोकता है? शायद नहीं, है ना? –

+1

चेक नहीं किया है, लेकिन मुझे लगता है कि यह देखकर कि यह पहले से ही एएसपी.Net पाइपलाइन के माध्यम से चला गया है, यह पहले से ही लॉग में है – emertechie

संबंधित मुद्दे