HttpServletRequest通过Referer实现简单防盗链
实现 简单 通过 防盗链 HttpServletRequest REFERER
2023-09-14 09:14:18 时间
我们知道在http中请求头中有一个referer来表示请求来自于哪里,于是我们就可以通过这个请求来判断是不是应该非法的请求,例如没有登录就直接进行访问。下面用Referer来实现应该简单的防盗链。
我们首先创建登录界面,然后再创建一个Servlet来接收登录请求,如果直接访问这个Servlet那么就重定向到登录界面,如果链接来自于登录界面,那么就输出访问成功,代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="http://localhost:8080/servlet/referer" method="post">
用户名:<input type="text" name="username"><br>
密 码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/referer")
public class RefererServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取Referer
String referer = request.getHeader("Referer");
//设置响应的MIME和编码
response.setContentType("text/html;charset=utf-8");
//判断是不是来自登录界面
if ("http://localhost:8080/servlet/login_request.html".equals(referer)){
//获取输出流写出数据
PrintWriter writer = response.getWriter();
writer.write("<h1>访问成功</h1>");
}else {
//重定向到登录界面
response.sendRedirect("http://localhost:8080/servlet/login_request.html");
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
}
}
我们首先正常流程进行登录访问,发现访问成功
那么现在我们再来尝试直接访问这个Servlet,发现重定向到了登录界面
上面就是一个最简单的防盗链,我们通过Referer就能实现对请求的控制,对哪些请求做出正确的响应,对哪些非法请求做出拒绝
相关文章
- 单点登录原理与简单实现(转)
- 实现页面加载等待动画很简单吗?
- WinForm实现简单的拖拽功能(C#)(2)
- Java实现最电话号码的简单加密源码
- struts+hibernate+oracle+easyui实现lazyout组件的简单案例——OpSessionview实现
- 分布式EventBus的Socket实现 - 发布订阅
- Java实现 LeetCode 646 最长数对链(暴力)
- java实现第六届蓝桥杯打印大X
- Java实现 蓝桥杯VIP 算法提高 种树
- 实例讲解-单向列表的实现(1)
- 用python实现简单EXCEL数据统计的实例
- IOS通过NSUserDefaults实现简单的应用间数据传递
- 【目标检测】数据增强:YOLO官方数据增强实现/imgaug的简单使用
- 【STM32F429开发板用户手册】第26章 STM32F429的定时器应用之TIM1-TIM14的中断实现
- 一种简单地实现 SAP UI5 Master detail 页面的方法
- ZZNUOJ_用C语言编写程序实现1148:吃糖果(附完整源码)
- 【手写Tomcat】2.实现游览器和服务器的简单通信
- HttpServletRequest通过Referer实现简单防盗链
- 【多数据源动态切换】Spring Boot中实现多数据源动态切换效果(2):通过开源项目Dynamic Datasource Spring Boot Starter实现
- Pytorch实现APNB
- 【华为OD机试Python实现】HJ1 字符串最后一个单词的长度(简单)
- 【华为机试Python实现】HJ10 字符个数统计(简单)
- 简单易懂的C语言实现双向链表代码
- 简单实现ant design pro react typescript(ts) spring boot mybatis mysql前后端登录接口 解决ant design pro登录成功无法跳转的问题
- transform rotate实现环形进度条
- 51行代码实现简单的PHP区块链
- CNN 卷积神经网络TensorFlow简单实现