2009-07-23 48 views
8

Có thể cấm các tác nhân người dùng nhất định trực tiếp từ web.config không? Một số robot dường như không theo dõi robots.txt và tránh tải máy chủ vô nghĩa (và gửi tệp spam), tôi muốn ngăn các lớp yêu cầu nhất định (cụ thể dựa trên tác nhân người dùng hoặc địa chỉ IP rất có thể) từ việc tiếp tục .Sử dụng web.config để cấm tác nhân người dùng

Điểm thưởng nếu bạn biết nếu nó tương tự như vậy có thể để ngăn chặn yêu cầu như vậy được đăng nhập vào tệp nhật ký của IIS hoàn toàn. (ví dụ: nếu yêu cầu-phù hợp, chuyển tiếp đến/dev/null, nếu bạn hiểu ý nghĩa của tôi).

Một giải pháp cho win2003 sẽ là thích hợp hơn, nhưng đây là một vấn đề định kỳ - nếu có giải pháp sạch cho IIS7 nhưng không phải IIS6, tôi rất vui khi biết điều đó.

Chỉnh sửa: Rất tiếc 'đã gửi câu hỏi chưa hoàn chỉnh trước đó, tôi đã vô tình nhập tab +.

Trả lời

11

Điều này có thể được thực hiện khá dễ dàng bằng cách sử dụng mô-đun URLRewrite trong IIS7. Nhưng tôi thực sự không biết nếu điều này sẽ ngăn chặn những yêu cầu được đăng nhập.

<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

Vâng, trang web đủ nhỏ để nhật ký IIS không hoàn hảo. vấn đề; đó là chủ yếu chỉ là tiếng ồn tôi sẽ không nhớ tránh - nhưng giải pháp này là chính xác những gì tôi đã hy vọng cho - một số module cấu hình có thể hủy bỏ yêu cầu nhất định. Tôi sẽ nhìn vào nó, cảm ơn! –

+0

Bạn có biết liệu có thể tạo một quy tắc cho nhiều bot không? – UpTheCreek

+0

@UpTheCreek Đây là một mẫu, miễn là bạn có cụm từ thông dụng xác định tất cả các bot được đề cập bạn muốn tìm, bạn có thể cắm nó vào đó. Tôi sẽ cẩn thận về điều đó mặc dù, nó có vẻ hơi nguy hiểm cho giết chết giao thông bình thường nếu bạn không cẩn thận. –

0

Đừng nghĩ rằng bạn có thể làm điều này từ web.config (ủy quyền trong web.config là dành cho người dùng, không phải là bot). Đặt cược tốt nhất của bạn sẽ là một số loại bộ lọc ISAPI tùy chỉnh cho bản thân IIS. Có một số blog about this here. Chúc may mắn!

3

Bạn có thể viết ASP.Net HttpModule tùy chỉnh như tôi đã làm cho trang web của mình cấm một số chương trình giả mạo. Đây là mã:

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 
} 

Bạn cần đăng ký nó trong web.config và chỉ định biểu thức chính quy để sử dụng để khớp với chuỗi tác nhân người dùng. Đây là một trong những tôi đã sử dụng để cấm lưu lượng truy cập 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

Điều này trông giống như những gì tôi đang tìm kiếm :-) cảm ơn! Bạn có biết điều này có ngăn các yêu cầu không được đăng nhập không? Có lẽ không, phải không? –

+1

Chưa được kiểm tra, nhưng tôi sẽ tưởng tượng rằng khi thấy điều này đã đi qua đường dẫn ASP.Net, nó đã có trong nhật ký – emertechie

Các vấn đề liên quan