跨站请求伪造解决办法之——过滤referer
请求 解决办法 过滤 伪造 跨站 REFERER
2023-09-11 14:19:27 时间
当然,referer也是可以伪造的,Http请求本身就没有不能伪造的东西。
所以本方法只能在一定程度上防止非法请求,仅供参考。
项目的web.xml中增加过滤器:
<filter> <filter-name>RefererFilter</filter-name> <filter-class>com.sdyy.common.filters.RefererFilter</filter-class> </filter> <filter-mapping> <filter-name>RefererFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping>
项目中增加RefererFilter类:
package com.sdyy.common.filters; import java.io.IOException; 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.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class RefererFilter extends HttpServlet implements Filter { private static final long serialVersionUID = 1L; private FilterConfig filterConfig; public void init(FilterConfig config) { this.filterConfig = config; } public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; // 链接来源地址 String referer = request.getHeader("referer"); if (referer == null || !referer.contains(request.getServerName())) { /** * 如果 链接地址来自其他网站,则返回错误页面 */ request.getRequestDispatcher("/WEB-INF/error.jsp").forward(request, response); } else { chain.doFilter(request, response); } } public void destroy() { this.filterConfig = null; } }
相关文章
- GET请求中URL的最大长度限制总结
- JS AJAX跨域详解,支持get和post请求
- MVC扩展ActionInvoker,自定义ActionInvoker,根据请求数据返回不同视图
- OkHttp上传文件,服务器端请求解析找不到文件信息的问题
- SwiftUI iOS 完整项目之网络请求文章并列表显示JSON
- 如何优雅地读写HttpServletRequest和HttpServletResponse的请求体
- 监控微信小程序wx.request请求失败
- axios基本用法、axios如何发起网络请求?如何二次封装axios?
- 当很多连接到你的数据库时,报这种错误“已超过了锁请求超时时段” SqlServer数据库正在还原的解决办法
- HTTP请求之referrer与Referrer-Policy