淘东电商项目(69) -互联网安全架构设计(XSS攻击防御)

本文主要是介绍淘东电商项目(69) -互联网安全架构设计(XSS攻击防御),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言

本文代码已提交至Github(版本号:b18e61d3130215c1da77849cc94ba33c60149f88),有兴趣的同学可以下载来看看:https://github.com/ylw-github/taodong-shop

在之前博客《淘东电商项目(67) -互联网安全架构设计(方法论)》,主要讲解了互联网安全架构设计的方法,主要介绍了如下几种:

  • 基于网关实现IP黑名单与名单拦截
  • API接口实现Token授权认证
  • 使用MD5实现API接口验证签名,防止抓包篡改数据
  • 实现API接口安全加密传输(公钥和私钥互换机制)
  • 基于Oauth2.0 实现API接口开放平台
  • 接口参数使用网关实现防止XSS、SQL注入
  • 定期工具实现代码健康扫描

上面的打勾代码实现在上一篇博客已经实现《淘东电商项目(68) -互联网安全架构设计(黑名单拦截及MD5加签)》,本文主要讲解如何防御XSS攻击。

本文目录结构:
l____引言
l____ 1.什么是XSS攻击
l____ 2.代码实现
l____ 3.测试

1.什么是XSS攻击

XSS攻击在前面的博客有讲解过,有兴趣的同学可以参阅《互联网并发与安全系列教程(05) - 常见的Web安全漏洞(XSS攻击、SQL注入、防盗链)》。

用简单的话来描述,举个例子:比如用户提交订单,url地址如下:

  • http://ip:[port]/submit?name=玉米香肠&price=9.99&desc=玉米香肠很好吃

可以看到上面的订单地址是有“商品名称name”、“价格price”、“描述desc”组成,其中“描述”是用户填写的,这个时候黑客把里面的描述(desc)改成js脚本如:

  • http://ip:[port]/submit?name=玉米香肠&price=9.99&desc=< script>js脚本用于读取本地cookies,并提交或重定向到黑客的服务器</ script>

提交信息到后台后,后台会直接保存到数据库,下次如果商户查询订单列表时,会加载商品描述desc,这个时候会直接把商户本地的cookies信息发送给黑客的服务器,这就是XSS攻击了。那该如何防御呢?

其实用户提交信息的时候,我们在后台网关处理下请求参数就好了,把关键字“<”、“>”这些脚本括号,做下转义处理即可,下面来讲解下代码。

2.代码实现

继续完善上一篇博客的代码,完善建造者里面的内容。

①建造者接口增加过滤参数功能:

/*** description: 网关行为建造者* create by: YangLinWei* create time: 2020/5/20 9:09 上午*/
public interface GatewayBuild {/*** 黑名单拦截*/Boolean blackBlock(RequestContext ctx, String ipAddres, HttpServletResponse response);/*** 参数验证*/Boolean toVerifyMap(RequestContext ctx, String ipAddres, HttpServletRequest request);/*** 参数过滤转义(防御XSS攻击)*/Map<String, List<String>> filterParameters(HttpServletRequest request, RequestContext ctx);
}

②接口实现(VerificationBuild类):

@Override
public Map<String, List<String>> filterParameters(HttpServletRequest request, RequestContext ctx) {Map<String, List<String>> requestQueryParams = ctx.getRequestQueryParams();if (requestQueryParams == null) {requestQueryParams = new HashMap<>();}Enumeration em = request.getParameterNames();while (em.hasMoreElements()) {String name = (String) em.nextElement();String value = request.getParameter(name);ArrayList<String> arrayList = new ArrayList<>();// 将参数转化为html参数 防止xss攻击 < 转为&lt;arrayList.add(StringEscapeUtils.escapeHtml(value));requestQueryParams.put(name, arrayList);log.info(">>>>>>过滤参数name:{},arrayList:{}>>>>>>>", name, arrayList);}return requestQueryParams;
}

③构建者:

@Component
public class GatewayDirector {@Resource(name = "verificationBuild")private GatewayBuild gatewayBuild;public void direcot(RequestContext ctx, String ipAddres, HttpServletResponse response, HttpServletRequest request) {/*** 黑名单拦截*/Boolean blackBlock = gatewayBuild.blackBlock(ctx, ipAddres, response);if (!blackBlock) {return;}/*** 参数验证*/Boolean verifyMap = gatewayBuild.toVerifyMap(ctx, ipAddres, request);if (!verifyMap) {return;}/*** XSS攻击处理*/Map<String, List<String>> filterParameters = gatewayBuild.filterParameters(request, ctx);if (filterParameters != null && filterParameters.size() > 0) {ctx.setRequestQueryParams(filterParameters);}}}

3.测试

浏览器访问:http://localhost/api-pay/cratePayToken?payAmount=9999&orderId=20200513141452&userId=27&productName=广东米酒&orderDes=< script>alert(‘sss’)</ script>,在控制台,可以看到订单描述orderDesc里面的内容被转义了,从而达到防御XSS攻击。

在这里插入图片描述

本文完!

这篇关于淘东电商项目(69) -互联网安全架构设计(XSS攻击防御)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/654819

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

SpringBoot项目是如何启动

启动步骤 概念 运行main方法,初始化SpringApplication 从spring.factories读取listener ApplicationContentInitializer运行run方法读取环境变量,配置信息创建SpringApplication上下文预初始化上下文,将启动类作为配置类进行读取调用 refresh 加载 IOC容器,加载所有的自动配置类,创建容器在这个过程

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

2. 下载rknn-toolkit2项目

官网链接: https://github.com/airockchip/rknn-toolkit2 安装好git:[[1. Git的安装]] 下载项目: git clone https://github.com/airockchip/rknn-toolkit2.git 或者直接去github下载压缩文件,解压即可。

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后,将用户信息存储在记录在 localStorage中,然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上,并且头像设置跳转,到个人资料界面 这里数据库中还没有设置相关信息 2.模糊查找 检测输入框是否有变更,有的话调用方法,进行查找 发送检测请求,然后接收的时候设置最多显示四个类似的搜索结果

速盾高防cdn是怎么解决网站攻击的?

速盾高防CDN是一种基于云计算技术的网络安全解决方案,可以有效地保护网站免受各种网络攻击的威胁。它通过在全球多个节点部署服务器,将网站内容缓存到这些服务器上,并通过智能路由技术将用户的请求引导到最近的服务器上,以提供更快的访问速度和更好的网络性能。 速盾高防CDN主要采用以下几种方式来解决网站攻击: 分布式拒绝服务攻击(DDoS)防护:DDoS攻击是一种常见的网络攻击手段,攻击者通过向目标网