功能描述
不允许从禁用的站点(IP)访问当前应用,也不允许从禁用的站点链接到当前应用。
为了简单起见,设置禁用站点时,暂不支持使用通配符。只是抛砖引玉了。
比如:禁止其他的网站引用本站的图片资源,只需在此基础上稍作修改即可。
使用方法
在 java web 项目的 web.xml 文件中添加如下代码。
<!--设置站点黑名单的过滤器配置 开始 --> < filter >
< filter-name >BannedAccessFilter</ filter-name >
< filter-class >com.hmw.filter.BannedAccessFilter</ filter-class >
< init-param >
< description >需要禁用的站点,一个站点占用一行</ description >
< param-name >bannedSites</ param-name >
< param-value >
192.168.1.101
192.168.1.102
www.csdn.net
</ param-value >
</ init-param >
</ filter >
< filter-mapping >
< filter-name >BannedAccessFilter</ filter-name >
< url-pattern >/*</ url-pattern >
</ filter-mapping >
<!--设置站点黑名单的过滤器配置 结束 --> |
过滤器源码
package com.hmw.filter;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashSet;
import java.util.StringTokenizer;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
/** * 设置禁用站点(黑名单)的过滤器
*/
public class BannedAccessFilter implements Filter {
static final Logger logger = Logger.getLogger(BannedAccessFilter. class );
private HashSet bannedSiteTable;
/**
* 将配置的禁用站点列表初始化到一个 HashSet 中
*/
@Override
public void init(FilterConfig config) throws ServletException {
bannedSiteTable = new HashSet();
String bannedSites = config.getInitParameter( "bannedSites" );
// Default token set: white space.
StringTokenizer tok = new StringTokenizer(bannedSites);
while (tok.hasMoreTokens()) {
String bannedSite = tok.nextToken();
bannedSiteTable.add(bannedSite);
logger.info( "Banned " + bannedSite);
}
}
/**
* 如果请求来自被禁用的站点,或是从被禁用的站点链接过来的,则拒绝访问。
*/
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
logger.debug( "BannedAccessFilter: Filtering the Request..." );
HttpServletRequest req = (HttpServletRequest) request;
String requestingHost = req.getRemoteHost();
String referringHost = getReferringHost(req.getHeader( "Referer" ));
String bannedSite = null ;
boolean isBanned = false ;
if (bannedSiteTable.contains(requestingHost)) {
bannedSite = requestingHost;
isBanned = true ;
} else if (bannedSiteTable.contains(referringHost)) {
bannedSite = referringHost;
isBanned = true ;
}
if (isBanned) {
showWarning(response, bannedSite);
} else {
chain.doFilter(request, response);
}
logger.debug( "BannedAccessFilter: Filtering the Response..." );
}
@Override
public void destroy() {
}
/**
* 根据 URL 链接地址,取得该链接地址所在的站点
* @param refererringURLString URL链接地址
* @return 该 URL 链接地址所在的站点,如果传入的参数不是一个符合URL规范的字符串,则返回 <code>null</code>
*/
private String getReferringHost(String refererringURLString) {
if (StringUtils.isBlank(refererringURLString))
return null ;
try {
URL referringURL = new URL(refererringURLString);
return referringURL.getHost();
} catch (MalformedURLException mue) { // Malformed
return null ;
}
}
/**
* 如果用户是从禁用站点访问的该应用,或是从禁用站点链接过来的,则调用此方法将警告信息展现给用户。
* @param response HTTP请求响应对象
* @param bannedSite 禁止的站点
* @throws ServletException
* @throws IOException
* @author <a href="mailto:hemw@mochasoft.com.cn">何明旺</a>
*/
private void showWarning(ServletResponse response, String bannedSite) throws ServletException, IOException {
String htmlCode = "" ;
htmlCode += "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" ;
htmlCode += " <head>" ;
htmlCode += " <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />" ;
htmlCode += " <title>禁止访问</title>" ;
htmlCode += " </head>" ;
htmlCode += " <body>" ;
htmlCode += " <h1>禁止访问</h1>" ;
htmlCode += " <p>对不起,您无法访问该资源,因为您的站点已经被列入我们的黑名单!</p>" ;
htmlCode += " <p>您的站点是:<strong>" + bannedSite + "</strong></p>" ;
htmlCode += " </body>" ;
htmlCode += "</html>" ;
response.setContentType( "text/html" );
PrintWriter out = null ;
try {
out = response.getWriter();
out.println(htmlCode);
} finally {
if (out != null ){
out.flush();
out.close();
}
}
/*
* 也可以使用下面的方法直接转发或重定向到指定的警告页面
* 转发:
* ((HttpServletRequest)request).getRequestDispatcher("/warn.html").forward(request, response);
* 重定向:
* ((HttpServletResponse)response).sendRedirect("webAppContext/warn.html");
*/
}
} |
相关推荐
如果请求中包含了黑名单中的任何关键词,该过滤器将采取相应行动,如返回错误页面、记录日志或直接阻止请求。这样可以有效地防止诸如SQL注入、跨站脚本(XSS)等常见的Web应用攻击。 配置IIS关键词拦截过滤器通常...
皮皮网站黑名单工具主要是结合应用接口支持库和操作系统界面功能支持库,通过提交网站网站来设置,实现禁止网站访问功能。 软件特点: 皮皮网站黑名单工具可以有效访问垃圾网站、广告网站等站点的访问,同时公司还...
软件简介皮皮网站黑名单工具主要是结合应用接口支持库和操作系统界面功能支持库,通过提交网站网站来设置,实现禁止网站访问功能。点评皮皮网站黑名单工具可以有效访问垃圾网站、广告网站等站点的访问,同时公司还...
2. IP黑白名单:通过设置IP地址黑名单,可以阻止特定IP地址的请求。同时,白名单则可以允许特定IP或IP段的访问,确保合法用户的正常访问不受影响。 3. 图片水印:对于图片资源,NoLinkMe还可以添加不可见的水印,...
"WordPress的评论黑名单"就是一个针对这个问题的有效解决方案,它允许站点管理员阻止特定词汇或用户ID,从而过滤掉垃圾评论。 "源代码"标签表明我们将深入到WordPress插件开发的层面,通过编写代码来实现这一功能。...
3. **配置ISAPI筛选器**:在IIS管理控制台中,选择你要应用过滤器的站点,然后在"ISAPI筛选器"部分添加新的筛选器,设置筛选器名称(如"IIS非法信息过滤器")并指向过滤器的DLL文件路径。 4. **设置筛选规则**:...
皮皮网站黑名单工具主要是结合应用接口支持库和操作系统界面功能支持库,通过提交网站网站来设置,实现禁止网站访问功能。 点评 皮皮网站黑名单工具可以有效访问垃圾网站、广告网站等站点的访问,同时公司...
防盗链过滤器通常检查HTTP请求的来源(Referer头),如果发现请求并非来自预期的站点,就会阻止资源的访问,从而保护了服务器带宽和资源不被滥用。 然后,我们提到了“异常处理”。在Web应用中,良好的异常处理能够...
TransCAD 中设置公交线路和公交站点的详细步骤 TransCAD 是一款专业的交通规划和分析软件,广泛应用于交通规划、交通管理、交通研究等领域。TransCAD 中设置公交线路和公交站点是交通规划和分析的关键步骤,本文将...
鲜奶配送站点的最优化设置问题 鲜奶配送站点的最优化设置问题是指在一定的区域内,如何合理的设置鲜奶配送站点的位置和数量,以满足鲜奶的配送需求,降低成本,提高效率。该问题涉及到供应链管理、运筹学、数学建模...
XSS跨站点脚本注入攻击过滤器,包括antisamy官方提供的各种策略xml文件。 antisamy-slashdot.xml 策略 antisamy-ebay.xml 策略 antisamy-myspace.xml 策略 antisamy-anythinggoes.xml 策略
4. **应用设置**:保存后,工具会将这些设置应用到IE浏览器,使用户在指定站点上能够顺利运行ACTIVEX插件。 **四、安全注意事项** 虽然"IE安全站点设置工具"简化了配置过程,但用户仍需谨慎操作,避免添加不安全的...
在电信设备领域,燃油过滤器是一个至关重要的组件,特别是在大型通信基站或远程无线电站点中,这些站点往往依赖柴油发电机作为备用电源。"电信设备-具有排水管的燃油过滤器"这个主题聚焦于一种特殊的燃油过滤器设计...
黑名单是一个非常简单的网站拦截器,为个人使用而设计。 这是一个非常简单的Google Chrome扩展程序。当您发现自己的网站占用了太多时间时,只需点击Chrome右上角的“黑名单”按钮,当黑名单保持活动状态时,您将被...
在IT领域,尤其是在网络安全和浏览器配置中,"设置可信站点"是一个重要的环节,它涉及到用户如何安全地访问网络上的各种资源。"启用通过域访问数据资源"则进一步细化了这一概念,强调了特定网络区域(如公司内部域)...
《城市公交站点设置的优化分析》项目全套是一个深入探讨公共交通系统效率提升的实践案例,它结合了数据分析与挖掘技术,旨在优化城市公交站点的布局,提高公共交通服务的质量和乘客满意度。该项目资料包括源码和源...
cloudflare目前找到的ip名单,可用于设置ip白名单以免网站访问受限
在这个实例中,我们学习了如何使用过滤器防止盗链,通过检查请求头中的`Referer`字段,确保只有来自我们站点的请求才能访问资源。同时,我们也了解了如何在`web.xml`中配置过滤器,使其生效。对于初学者来说,这是一...
zj-58, 用于热打印机 Zjiang 58的CUPS过滤器 zj-58用于热打印机 Zjiang ZJ-58的CUPS过滤器不幸的是,Zjiang站点提供的linux驱动程序。 首先,它是 32位 二进制( 因此,在x64系统上需要安装一些x86库) 。 其次是不...
:star:功能:star::prohibited: 网站过滤将色情有害网站地址加入黑名单列表,我们的扩展程序将在chrome中屏蔽该网站,并且该网站将无法访问,可以过滤阻止黑名单中的网站(可以选择子域名网站地址)。:no_one_under_...