js和jsp获取网页的访问来源及其应用
有时我们想知道此页的前一页地址(此页是浏览者从哪里链接过来的)的时候,就用到“访问来源”的方法。javascript用于任意扩展名的页面,但需要跟其他语言(如JSP,PHP)整合。
Javascript方法:
<script language="javascript">
document.write(document.referrer);
</script>
jsp方法:request.getHeader("Referer")
比较:
1.javascript里是"referrer",jsp里是"referer",前者比后者多一个"r";
2.前者如直接输入网址,则显示为空,后者显示null;
获取网页的访问来源又有什么用途呢?一是可以跟踪记录从哪些网站、网页上访问了自己的站点或者页面;二是可以记住刚才访问的页面,可以跳转回去;还有一个很重要的用途,就是防盗链。一些网站的资源如图片、视频等,可能被链到其它网站上,或者黑客频繁的访问某些资源,把网站搞瘫痪,于是一些网站用了防盗链技术。一种简单的防盗链方法就是获取访问的url,比对是否是自己的url或者经授权的url,不符合条件的就不让访问,或者显示一些提示信息。
道高一尺,魔高一丈。访问的url是很容易被伪造的,我们再做一个c.asp:
<%
Dim http
set http = server.createobject("Microsoft.XMLHTTP")
http.open "GET","http://localhost/a.asp",false
http.setRequestHeader "Referer","http://www.baidu.com/"
http.send()
Response.write http.Responsetext
%>
然后在浏览器输入http://localhost/c.asp(根据实际修改访问路径),页面上看到如下内容:
访问来源是:http://www.baidu.com/
11111111111
可以看到Referer很容易的被伪造成一个任意输入的字符串。说了半天,HTTP_REFERER还是防君子不防小人,呵呵。
=========================
Jsp获取访问者真实IP地址
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了 Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用 request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实IP。
经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的 IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。当我们访问index.jsp/时,其实并不是我们浏览器真正访问到了服务器上的index.jsp 文件,而是先由代理服务器去访问index.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的,所以index.jsp中通过 request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。
于是可得出获得客户端真实IP地址的方法一:
public String getRemortIP(HttpServletRequest request) {
if (request.getHeader("x-forwarded-for") == null) {
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
}
获得客户端真实IP地址的方法二:
public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢?
答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。如:
X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
用户真实IP为: 192.168.1.110js和jsp获取网页的访问来源及其应用
分享到:
相关推荐
下面将详细探讨JSP在构建此类系统中的应用及其关键知识点。 **1. JSP基础** JSP是Java平台上的Web开发技术,允许开发者在HTML或XML文档中嵌入Java代码,从而实现动态网页。JSP文件会被Web容器转换为Servlet,然后由...
物流信息网页是一个基于Java和JSP技术开发的系统,它主要功能是提供物流信息的查询、跟踪和管理服务。在该系统中,SQL Server作为后台数据库,存储和处理与物流相关的大量数据。以下是对这个系统及其关键技术的详细...
在这个系统中,JSP(JavaServer Pages)作为核心开发语言,是用于创建动态网页的重要工具。接下来,我们将深入探讨JSP以及在"E家园网站系统"中的应用。 1. **JSP基础** JSP是Java平台上的服务器端脚本语言,用于...
而越来越多专业知识的 Blog 的出现,让我们看到了 Blog 更多所蕴涵的巨大的信息价值:不同的 Blog 选择不同的内容,收集和整理成为很多人关注的专业 Blog ——目前越来越多的人获取信息的来源是一些固定的 Blog 。...
- Tomcat:轻量级的应用服务器,适用于开发和调试JSP程序。 - **GIS服务器**: - ArcServer:Esri公司的产品,提供高性能的地图服务。 - MapServer:开源的GIS服务器软件,支持多种地图格式。 - GeoServer:...
网页——动态网页是指含有编程语言或脚本,能够根据服务器端与客户端的交互、数据库操作等因素实时生成内容的网页。动态网页可以提供个性化、互动性的用户体验,如用户登录、评论、搜索等功能。它们的扩展名可以是....
Web网页报表是现代数据分析和信息展示的关键组成部分,尤其在企业级应用中,它们帮助企业决策者快速理解业务状况,做出明智的决策。Java作为强大的后端开发语言,常常被用来构建这些复杂的报表系统。本篇文章将深入...
- **应用层**:提供具体的业务应用和服务。 #### 3.4 无线物联网信息管理系统功能模块设计 - **终端模块设计**:终端模块负责数据的采集和上传,通常包括各种类型的传感器和无线通信模块。 - **中继模块设计**:...
JSP(Java Server Pages)是一种用于动态网页的技术,它与CGI(Common Gateway Interface)相比有更高效和灵活的特点。在JSP中,可以使用如下代码创建并启动一个线程:`Thread t = new Thread("线程名称"); t.start...
- 限制`SearchPublicRegistries.jsp`页面的访问权限,只允许可信来源的请求。 **3. 应用级防护** - 使用WAF(Web Application Firewall)等工具进行流量监控,拦截异常请求。 - 实现细粒度的输入验证,确保所有用户...
- **JavaScript**: 一种脚本语言,用于实现网页的动态效果和与用户的交互。 **2. 数据库类型** - **关系型数据库**: 当前应用领域中最常见的数据库类型,如MySQL、SQL Server等。 **3. 表单处理** - `action`...
- **安全参数**:如`secureRequestOrigin`用于控制哪些来源的请求可以访问DWR服务。 - **Ajax服务器加载时保护参数**:如`protectFromAjaxLoad`防止DWR被恶意脚本加载。 - **其他参数**:例如`debug`控制调试信息的...
这份文档旨在帮助读者更好地理解和掌握DWR的基本概念及其在实际项目中的应用。它不仅适合初学者入门,同时也为有经验的开发者提供了深入学习的资源。 #### 版权声明 本书目前只提供网络版,并且完全免费。作者强调...
- D: `themeDefault.jsp`通过加载`ibmCSA.js`并调用`instantiateDrag()`来实现拖放功能。 - **答案**: B - **解析**: 在PageBuilder主题中,拖放功能是通过主题的`themeDefault.jsp`文件进行配置的。该文件会设置...
JavaScript中的引用类型主要包括对象(Object)、数组(Array)和函数(Function)。布尔(Boolean)属于基本数据类型,而非引用类型。 ### 数据库查询 在数据库中,可以使用 SQL 查询语言来检索特定的数据。例如...
- 在数据库中引入数据字典表,将常用的固定的数据(如:客户的类别来源等)统一存放到字典表中,利用 ajxa 异步获取字典表中的数据,提高程序的运行速度,也解耦合便于数据维护。 - 管理企业员工。
接下来,我们将详细介绍这些状态代码及其在实际开发中的应用。 HTTP状态代码主要分为五个类别: 一、2xx(成功)类代码:这类状态码表示客户端的请求已成功被服务器接收、理解并接受。例如: - 200 OK:这是最常见...