web安全之--UrlRewrite

article/2025/9/17 4:07:24

最近在做一个项目,在做项目的过程中发现,由于自己的命名规范,显示在url地址栏中的信息如果不加修饰,很容易被人理解并且改写。如果让别人看不懂自己网站上的url地址栏的内容是不是非常好呢,于是自己便发时间去查找资料研究了一下,最后发现UrlRewrite很趁自己的心意。经过学习发现UrlRewrite有很多优点,第一,提高安全性,可以避免参数和id等完全暴露在用户面前。第二,美化URL。第三:由于网络爬虫特别喜欢静态网页,所以更有利于搜索引擎收入。

好讲到这里,我们来实现第一个小demo吧。

首先建立一个web项目,然后在web.xml里面加上这样一段代码,也就是配置过滤器(建议此过滤器放在所有servlet和过滤器的上面)

<!-- urlrewrite过滤器-->
<filter><filter-name>UrlRewriteFilter</filter-name><filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping><filter-name>UrlRewriteFilter</filter-name><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher>
</filter-mapping>
然后在web.xml的同级目录加一个urlrewrite.xml,因为默认是在这个目录找这个xml的,代码如下

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite
PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
"http://tuckey.org/res/dtds/urlrewrite4.0.dtd">
<urlrewrite><rule><!-- <from>中的地址表示我们浏览器要访问的地址 --><from>^/news/news.html$</from><!-- <to>中的内容表示浏览器访问了上述地址后,实际转向能真正访问系统的地址 --><to>/news/news.jsp</to></rule><rule><from>^/news/([0-9]+).html$</from><to>/news/news.jsp?newsId=$1</to></rule><outbound-rule><from>^/WebTest/news/news.jsp\?newsId=([0-9]+)$</from><to>/WebTest/news/$1.html</to></outbound-rule>
</urlrewrite>
然后是index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>首页</title>
</head>
<body><ul><li>新闻</li><ul><li><a href="${pageContext.request.contextPath}/news/news.html?newsId=news">新闻</a></li><li><c:url value="/news/news.jsp?newsId=1" var="tempNewsUrl"></c:url><a href="${tempNewsUrl}">新闻1</a></li><li><c:url value="/news/news.jsp?newsId=2" var="tempNewsUrl"></c:url><a href="${tempNewsUrl}">新闻2</a></li><li><c:url value="/news/news.jsp?newsId=3" var="tempNewsUrl"></c:url><a href="${tempNewsUrl}">新闻3</a></li></ul></ul>
</body>
</html>
 然后是news.jsp 这个jsp放在webContent的news文件夹下
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%Object newsId=request.getParameter("newsId"); %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>新闻</title>
</head>
<body>
本条新闻id为 :<%="news".equals(newsId.toString())?"空值,因为您访问的是静态页面news.html":newsId %>
</body>
</html>
这样写完后运行一下,将鼠标移到链接出就会出 现这样的提示,说明已经成功了

点击后的url地址栏



解释原因

上面整个过程中,实现伪静态起关键作用的就是urlrewrite.xml的配置。

  先看<rule>标签中的配置:

  <from>中的地址表示我们浏览器要访问的地址(即敲回车前在地址栏输入的地址,或者<a>标签指向的连接),可以自己指定。<from>中的地址内,括号里的内容为正则表达式,用来过滤字符,比如 ^/news/([0-9]+).html$ 表示可以匹配/news目录下以任意位数字命名的.html文件,如news/1.html、news/1234.html等。主要用于过滤访问路径或传参。

  <to>中的内容表示浏览器访问了上述地址后,实际转向能真正访问系统的地址,这个地址需要是真是存在的(当然SpringMVC可以设置为Controller的地址,struts2可以设置为action的地址等),上面例子<to>标签指向的地址中的“$1”表示<from>标签中的第一处正则表达式所匹配的实际内容,利用这一特性,可以达到传参的效果。


<rule>标签所起到的作用就是:浏览器访问的是<from>中的地址,它把这个地址经过过滤转向访问<to>中地址,返回时再以静态地址的方式显示。

  但一般情况下,这些静态地址都不是我们手动输入到地址栏的,而是存在于网页中,由用户点击访问的,而且很多情况下<a>标签中的地址都会用动态地址如.jsp、.php等,这种情况下,就需要使用<outbound-rule>了。滑动一下鼠标再上去看一下<outbound-rule>的配置会发现,其中的<from><to>标签中的内容差不多与<rule>标签刚好相反。

  文章上面对”新闻1”链接的配置就是如此,<c:ur>中的地址本来是动态地址,经过与jstl的<c:ur>标签结合使用,给用户展现的就是一个静态地址了,相当于比直接访问静态页面多走了两步,urlrewrite.xml中具体执行顺序如下

这里写图片描述

${tempNewsUrl}中的链接指向<outbound-rule>标签<from>中的地址,继而通过各种转向,最终执行到真正的动态地址。

  温馨提示:一些特殊字符在<outbound-rule>中需要转义哦!比如“?”需要转义成“\?”,“&”需要转义成“&amp ;”……

最后要使用这个功能,别忘了到jar包到lib文件夹下哟

下载链接:http://pan.baidu.com/s/1csuZYu




http://chatgpt.dhexx.cn/article/rXP4bKXu.shtml

相关文章

URLRewrite地址重定向的实现

URLRewrite就是我们通常说的地址重写&#xff0c;用户得到的全部都是经过处理后的URL地址。其优点有&#xff1a; &#xff08;1&#xff09;提高安全性&#xff0c;可以有效的避免一些参数名、ID等完全暴露在用户面前&#xff0c;如果用户随便乱输的话&#xff0c;不符合规则…

URLRewrite,地址重写.

我们为什么要使用URLRewrite重写url技术呢&#xff0c;在网上搜了一下&#xff0c;有篇文章说是有主要三个原因 1、满足搜索引擎的要求 2、隐藏技术实现&#xff0c;提高网站的移植性 3、满足美感的要求 首页&#xff0c;访问其官网&#xff1a;我下载的是最新的目前还处于B…

urlrewriter 用法

1、简介 UrlRewriteFilter是一个用于改写URL的Web过滤器&#xff0c;类似于Apache的mod_rewrite。适用于任何Web应用服务器&#xff08;如Resin&#xff0c;Orion&#xff0c;Tomcat等&#xff09;。其典型应用就把动态URL静态化&#xff0c;便于搜索引擎爬虫抓取你的动态网页…

UrlRewrite 的配置和使用总结

UrlRewrite就是我们通常说的地址重写&#xff0c;用户得到的全部都是经过处理后的URL地址。 主要优点 一&#xff1a;提高安全性&#xff0c;可以有效的避免一些参数名、ID等完全暴露在用户面前&#xff0c;如果用户随便乱输的话&#xff0c;不符合规则的话直接会返回个404或错…

IIS 无法安装URL重写模块的解决办法 UrlReWrite (.NET`SQL技术交流 群号206656202)

下载和安装URL Rewrite IIS8默认是没有安装URL重写工具的,必须要自己下载安装。 如果IIS上默认有安装Web平台安装程序,我们可以使用平台自动安装URL Rewrite重写工具,打开IIS(Internet 信息服务管理器),在管理器主页中找到管理项,打开Web平台安装程序,如下图: 在Web平台…

java编程之伪静态(urlrewrite)

&#xff08;Notice&#xff1a;欢迎交流和沟通&#xff0c;Wx:IT_Ezra&#xff0c;QQ 654303408。仅个人观点和个人理解有问题讨论也可联系我。&#xff09; 对于伪静态&#xff0c;解释一下就是假的静态&#xff0c;说的官方点就是“地址重写&#xff0c;用户得到的全部地址…

Web服务器群集——URL地址重写(Rewrite)

URL地址重写&#xff08;Rewrite&#xff09; 一、什么是URL地址重写 &#xff08;Rewrite &#xff09;&#xff1f;二、Rewrite 相关指令三、Rewrite flag四、Rewrite匹配参考示例4.1 Rewrite 案例一4.2 Rewrite 案例二4.3 Rewrite 案例三4.4 Rewrite 案例四4.5 Rewrite 案例…

UKSM KSM在Android上的表现

作为一个系统管理程序&#xff08;hypervisor&#xff09;&#xff0c;Linux 有几个创新&#xff0c;2.6.32 内核中一个有趣的变化是 KSM(Kernel Samepage Merging) 允许这个系统管理程序通过合并内存页面来增加并发虚拟机的数量。Linux UKSM 是国人自主研发的一个 Linux 内核相…

针对低端机KSM的优化

&#xfeff;&#xfeff; 简介&#xff1a; KSM的基本概念和思想可参考如下的分析 http://blog.csdn.net/summer_liuwei/article/details/6013255 http://blog.csdn.net/haitaoliang/article/details/25003395 代码分析 一&#xff0c; 编译设置&#xff0c;初始化 1. kernel-…

Linux KSM共享内存

简介&#xff1a;作为一个系统管理程序&#xff08;hypervisor&#xff09;&#xff0c;Linux 有几个创新&#xff0c;2.6.32 内核中一个有趣的变化是 KSM(Kernel Samepage Merging) 允许这个系统管理程序通过合并内存页面来增加并发虚拟机的数量。本文探索 KSM 背后的理念&am…

Linux KSM

转载&#xff1a;http://www.cnblogs.com/zhangzhang/archive/2012/05/23/2514336.html 简介&#xff1a;作为一个系统管理程序&#xff08;hypervisor&#xff09;&#xff0c;Linux 有几个创新&#xff0c;2.6.32 内核中一个有趣的变化是 KSM(Kernel Samepage Merging) 允许…

KSM应用实践

KSM应用实践 原创 lyonger 网易游戏运维平台 2019-08-17 lyonger 18年加入网易&#xff0c;先后负责过多个游戏产品的运维工作&#xff0c;多年运维生涯。负责小游戏CI/CD、事件处理平台开发、游戏Nomad运维模式探索、gitlab平台维护等工作。主要关注Linux性能优化、DevOps、云…

linux ksm,内存页面共享-KSM

导读 本文适合有基本Linux内存管理概念的新手阅读&#xff0c;且本文旨在从工作流程和设计思想上介绍KSM&#xff0c;在涉及到源代码的地方&#xff0c;进行了部分删减&#xff0c;如果想详细了解KSM&#xff0c;推荐阅读源代码及源代码中的注释。 作者也是初次接触Linux内核源…

Linux内存管理 之 KSM功能介绍

目录 前言1. 概述1.1 使用 madvise 控制 KSM1.1 KSM 守护进程 sysfs 接口 2.KSM技术应用场景3. KSM技术实践3.1 查看KSM运行情况3.2 KSM设置3.3 对vm的设置 前言 KSM(Kernel Samepage Merging) 共享内存的概念在现代操作系统中很常用了&#xff0c;比如&#xff0c;一个程序启…

HTTP 401 错误 - 未授权: (Unauthorized)

http://blog.csdn.net/patronsaint/article/details/5639962 介绍 您的Web服务器认为&#xff0c;客户端&#xff08;例如您的浏览器或我们的 CheckUpDown 机器人&#xff09;发送的 HTTP 数据流是正确的&#xff0c;但进入网址 (URL) 资源 &#xff0c; 需要用户身份验证 &a…

403错误(已解决)

问题描述&#xff1a; 取得到图片的地址&#xff0c;但是显示图片无法加载 浏览器开发者模式报错403 问题解决&#xff1a; 图片的url部署在阿里云的oss存储仓库上&#xff0c;登陆阿里云发现是欠费导致的oss文件存储功能失效 补充&#xff1a; 403 Forbidden错误的原因和解…

Error:Request failed with status code 401

Error:Request failed with status code 401 错误示例&#xff1a; // 获取个人信息 export const getUserInfoAPI () > {return request({url: /v1_0/user/profile,method: GET,Headers: {Authorization: Bearer ${getToken()}}}) }正确做法 // 获取个人信息 export co…

服务器发送了 HTTP 状态代码 401: Unauthorized

根据wsdl连接生成客户端代码&#xff0c;调用接口报错&#xff1a;服务器发送了 HTTP 状态代码 401: Unauthorized。查询此错误的原因是没有访问权限&#xff0c;想到客户再提供接口wsdl访问连接的时候提供了用户名和密码。 解决办法&#xff1a; 增加此类 在接口运行前增加此…

前端401错误 解决方法:响应拦截器

目录 1.该问题出现的原因 2.处理401问题的解决方案原理 3.使用响应拦截器解决问题 1.该问题出现的原因 在前后端分离项目中&#xff0c;最常见的是前端点击登录后&#xff0c;后端返回token字符串&#xff0c;这个token可以看作是一个“令牌”&#xff0c;就比如你去酒店办理…

解密网站401错误:了解发生原因和修复方法

​  每个网站都会有不同的错误码&#xff0c;其中&#xff0c;401错误被认为是相对常见的错误码。那么&#xff0c;什么是网站401错误呢?在摸清了这一点之后&#xff0c;我们也需要学习一下如何解决它。 什么是 401 状态码? 401 状态代码是 Web 服务器发送给浏览器的 HTTP …