jsp工程防止外部注入_XPATH注入详解|OWASP Top 10安全风险实践(五)

本文为一些列连载文章之一,不定期更新,计划目录如下:

OWASP介绍

SQL注入

命令注入

XML外部实体注入

XPATH注入

反射式、DOM及存储XSS

失效的身份认证和会话管理

不安全的直接对象引用

安全配置错误

敏感信息泄露

功能级访问控制缺失

跨站请求伪造

服务端请求伪造

文件上传漏洞

未验证的重定向和转发

不安全的反序列化

使用含有已知漏洞的组件

一、     注入

注入攻击漏洞,例如SQL,OS 以及 LDAP注入。这些攻击发生在当不可信的数据作为命令或者查询语句的一部分,被发送给解释器的时候。攻击者发送的恶意数据可以欺骗解释器,以执行计划外的命令或者在未被恰当授权时访问数据。

  1. Xpath注入

  • 漏洞利用演示

页面功能:通过用户名查询对应用户的电话号码。用户名和电话号码存储在XML文件中。XML文件内容如下:

8548f67b053630978e6663a329836c74.png

正常查询和恶意利用结果对比如下:

5255e43f6f0efc6b6a5cec835462fe0c.png

a3f8ea1365b8a13b300b3e973e8ef1ec.png

  • 漏洞危害说明

用户输入的字符被用于XPATH的查询表达式中,这些恶意编造的字符会获取XML文件中非授权数据,从而用于执行身份验证、数据使用或者其它操作等;

  • 漏洞代码分析

publicvoiddoPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {              File f= new File("D:\\Tomcat-7.0.55\\webapps\\owasp\\xml\\telphone.xml");              xpath_bad(request,response, f);} privatevoidxpath_bad(HttpServletRequest request, HttpServletResponseresponse, File f) throws ServletException,IOException {           Stringlname = request.getParameter("username1");                   String xpath = "/user_name_phone/user[name='" + lname + "']/phone";           SAXReadersaxReader = new SAXReader();           Documentdocument = null;           try {                document= saxReader.read(f);           } catch(DocumentException e) {                e.printStackTrace();           }           Elementroot = document.getRootElement();           List> list =root.selectNodes(xpath);           Iterator>iter = list.iterator();           Stringstr = "";            if(!iter.hasNext()) {                str= "用户不存在!";                request.setAttribute("xname",lname.toString());                request.setAttribute("xphone",str.toString());           } else {                while(iter.hasNext()) {                     Elementelement = (Element) iter.next();                     Stringtelno = element.getText();                     Stringtelname = element.getParent().elementText("name");                     str= str + telname.toString() + ":" +telno.toString() + "; ";                }                request.setAttribute("xname",lname.toString());                request.setAttribute("xphone",str.toString());           }           request.getRequestDispatcher("/jsp/xpath_sqldemo.jsp").forward(request,   response);}
用户输入的数据,未进行任何合法性验证,直接代入执行了Xpath查询。如果用户输入了恶意数据,如wah’ or ‘1’=’1,则查询表达式为:/user_name_phone/user[name='wah' or'1'='1']/phone,表示查询所有用户的电话号码。
  • 漏洞代码修复

  • 用户输入的XPATH查询数据,在服务端正式处理前,进行合法性验证;

  • 对用户输入数据中的单引号和双引号进行转义,避免用户恶意输入的单引号或双引号被当成XPATH查询表达式的分隔符解释;

  • 屏蔽XPATH查询时的出错信息;

  • 参数化XPath查询:将需要构建的XPath查询表达式,以变量的形式表示,变量不是可以执行的脚本。

防止Xpath注入可使用:

a.使用ESAPI提供的方法对输入进行验证

publicvoiddoPost(HttpServletRequest request, HttpServletResponse response)   throwsServletException, IOException {     File f = new File("D:\\Tomcat-7.0.55\\webapps\\owasp\\xml\\telphone.xml");     xpath_good_esapi(request,response, f);}
privatevoidxpath_good_esapi(HttpServletRequest request,HttpServletResponse response, Filef) throws ServletException,  IOException {           Stringlname = request.getParameter("username1");           lname = ESAPI.encoder().encodeForXPath(lname);           Stringxpath = "/user_name_phone/user[name='" + lname + "']/phone";           SAXReadersaxReader = new SAXReader();           Documentdocument = null;           try {                document= saxReader.read(f);           } catch(DocumentException e) {                e.printStackTrace();           }           Elementroot = document.getRootElement();           List>list = root.selectNodes(xpath);           Iterator>iter = list.iterator();           Stringstr = "";            if(!iter.hasNext()) {                ……           } else {                ……           }           request.getRequestDispatcher("/jsp/xpath_sqldemo.jsp").forward(request,                     response);     }

b.自定义校验方法过滤特殊字符

privatevoidxpath_good(HttpServletRequest request,HttpServletResponse response, File f) throwsServletException,IOException {           Stringlname = request.getParameter("username1");           Stringxpath = "/user_name_phone/user[name='" + lname + "']/phone";           try {                if (checkValueForXpathInjection(lname)) {                     ……                                  }else{                     ……                }           } catch (Exceptione) {                e.printStackTrace();           }     } publicboolean checkValueForXpathInjection(String value) throws Exception {     boolean isValid = true;     if ((value != null) &&!"".equals(value)) {           StringxpathCharList = "()='[]:,*/ ";           StringdecodedValue = URLDecoder.decode(value, Charset.defaultCharset().name());           for (char c :decodedValue.toCharArray()) {                if(xpathCharList.indexOf(c) != -1) {                     isValid= false;                     break;                }           }     }

 d3d773cfad0562b6af2c14ce8b3cce45.gif

3e118cf49a31ce8a7380c1e02c39a773.png

了解新钛云服

新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照

深耕专业,矗立鳌头,新钛云服获千万Pre-A轮融资

原电讯盈科中国区副总裁加入新钛云服「附专访」

新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

新钛云服一周年,完成两轮融资,服务五十多家客户

上海某仓储物流电子商务公司混合云解决方案

新钛云服出品的部分精品技术干货

国内主流公有云VPC使用对比及总结

万字长文:云架构设计原则|附PDF下载

刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!

Ceph OSD故障排除|万字经验总结

七个用于Docker和Kubernetes防护的安全工具

运维人的终身成长,从清单管理开始|万字长文!

OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

什么是云原生?

IT混合云战略:是什么、为什么,如何构建?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序反编译 g is not defined_培生幼儿启蒙英语 Level B | 小牧羊女在哪?

本栏目为羽佳讲绘本独家专稿,文中图片及音频已获得海豚传媒授权,未经允许请勿转载。大家好!我是毛毛。培生幼儿启蒙英语 Level B(升级版)的分享又来了!想了解这套绘本及购买信息的小伙伴们,可以点击喜大普奔&#xff0…

snmp 获得硬件信息_信息系统项目管理师(三)

常规信息系统集成技术系统集成:将计算机软件、硬件、网络通信等技术产品即成为能够满足用户特定需求的信息系统。(一)网络标准与网络协议1、网络协议网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。网络协议三要素&…

android 充电动画_iPhone 12充电测试:18/20W并无明显区别

原标题:iPhone 12充电测试:18/20W并无明显区别日前,充电头网使用苹果原装5W、12W、18W、20W以及65W充电器测试了iPhone 12的充电速度。从结果来看,苹果的五福一安的充电数据依旧“稳定”,半小时充入了18%的电量&#x…

跳出所有循环的语句_从零开始的Java之旅2.0 流程控制语句

前言昨天我们对Java的数据类型和运算符进行了充分讲解,今日我们学习流程控制语句. 今日内容:if else 判断语句switch 选择语句for 循环语句while 循环语句do while 循环语句break,continue 跳出语句概述:在一个程序执行的过程中,各条语句的执行顺序对…

el-table 树形表格 自定义展开图标_[shell脚本]表格数据在终端可视化输出

最终效果1. 自定义表格样式2. 自定义主题颜色支持三系普通颜色支持16色彩虹色支持单颜色回顾一下shell语法1. shell传递参数我们可以在执行shell脚本时实时传递参数从而指定某些具体的参数(在本例中包括表格的样式、颜色等),脚本中获取参数的…

kubectl apply -f_广州车展捷豹路虎参展阵容 全新F-PACE 路虎卫士90

近日,我们从相关渠道获得了捷豹路虎广州车展的阵容。将有两款新车亮相,新款捷豹F-PACE和路虎卫士90。新款捷豹F-PACE采用了最新的家族式设计风格,具有更时尚的造型设计,而路虎卫士90则拥有更短的轴距。外观方面:新款捷…

github gis 路径规划_Apollo问答丨车辆定位和轨迹规划用的是语义,还是3D Position?...

自Apollo开发者社区小程序上线以来,我们每一天都会在「社区问答」板块收到许多开发者的技术提问。每周,可爱的Apollo小姐姐都会精选出被采纳的社区问答进行整理汇总,并统一对大家进行答复。开发者在使用Apollo平台过程中,如果遇到…

astar插件下载 就行_暗黑破坏神2地图插件常用的设置,做自己的私人订制游戏!...

暗黑2是一款很老的游戏,虽然很经典,但游戏里有很多地方在今天看来有很多不方便的地方,比如无法查看怪物的一些属性,小地图上没有怪物显示,装备系统很复杂但一些数值不能直接查看比如物品等级。所以如今很多朋友玩这个游…

asp.net 将bmp格式图片怎么转换为jpg_Heic图片转换精灵-Heic图片高清转换JPG/PNG/BMP方法...

想打开heic文件,首先要做的是把图片格式转换成电脑可以查看的,电脑可以查看的形式也并非很单一,比如jpg/bmp/png,这些都是比较常用的格式,首先heic图片是苹果手机独有的图片格式,电脑上或者其他设备是无法打…

beaninfo详解源码解析 java_Java后端精选技术:源码解析Spring Cloud Zuul

Zuul 架构图在zuul中, 整个请求的过程是这样的,首先将请求给zuulservlet处理,zuulservlet中有一个zuulRunner对象,该对象中初始化了RequestContext:作为存储整个请求的一些数据,并被所有的zuulfilter共享。…

一加到1亿。C语言_可能是今年最难选的2部手机:小米10详细对比一加8T

原标题:可能是今年最难选的2部手机:小米10详细对比一加8T在智能手机行业里流传着这样一句话:旗舰处理器只能决定一款机型的下限,而不能决定它的上限;决定一款机型上限的是旗舰处理器之外的屏幕、拍照、UI等等。这句话放…

html5 webrtc fir 请求关键帧_中信建投官网强调认可我们的投资理念的股民朋友请求 CTRL D 收藏、锁定本直播地址...

本文摘要:有关中信建投官网强调认可我们的投资理念的股民朋友请求 CTRL D 收藏、锁定本直播地址的内容分享,跟踪了解如何看股票k线图,分享热点专题。欢迎来到 橘子股票直播间,本直播每日为大家更新最快、最精准、最全面的股市内容…

打印完全二叉树java_java 完全二叉树的构建与四种遍历方法示例

本来就是基础知识,不能丢的太干净,今天竟然花了那么长的时间才写出来,记一下。有如下的一颗完全二叉树:先序遍历结果应该为:1 2 4 5 3 6 7中序遍历结果应该为:4 2 5 1 6 3 7后序遍历结果应该为…

模拟 http connecttimeout_燃烧室数学模型模拟软件NPSS

燃烧室的各个结构都可以被建立数学模型用矩阵进行模拟计算,每个模型都由输入、定义各部件的参数以及输出组成。流体在系统中某个点的状态可以由速率、压力、温度和构成(例如铝粉和氢气的质量比例)等参数描述。由于各个参数之间存在反馈环路,导致输入和输…

两个时间点距离 time_t c_天津二建公路考试时间

天津二建公路考试时间 Vadg42d天津二建公路考试时间 预警体系通过预警分析和预控对策实现事故的预警和控制,预警分析完成监测、识别、诊断与评价功能,而预控对策完成对事故征兆的不良趋势进行纠错和治错的功能。技术方案现金流量表主要有投资现金流量表&…

java 168转换成861_java实验-java语言面向对象编程基础

java实验-java语言面向对象编程基础 (12页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!8.90 积分广州大学学生实验报告广州大学学生实验报告开课学院及实验室:开课学院及实验室&#xf…

c#养老院老人信息管理系统源码 论文_辽宁吃的好的社区养老院位置,爱心养老院_抚顺市望花区社会养老中心...

首页 > 新闻中心发布时间:2020-11-09 02:11:16 导读:抚顺市望花区社会养老中心为您提供辽宁吃的好的社区养老院位置,爱心养老院的相关知识与详情: 老人早晨气场后手指经常发硬,无法自己握拳。 老人关节活动不方便,活…

SQL进阶:子查询

一般情况下,我们都是直接对表进行查询,但有时候,想要的数据可能通过一次select 获取不到,需要嵌套select,这样就形成了子查询。 子查询可以位于查询语句的任意位置,主要的注意点在于用于不同的位置,和不同的关键字一起使用时,需要注意返回的列的数量和行的数量。 位于…

android四周阴影效果_帮助独立开发者轻松创建令人惊叹的产品视觉效果

大家好,我是独立开发者Larry~作品发布、宣传交流过程中对作品进行样机包装或场景展示往往是不可或缺的,除了纯手工打造外,通常大家都会运用一些样机素材来完成对产品的快速包装,因此关于样机素材的资源网上有很多&…

pythonweb全栈开发_Web全栈开发穿插路程(python+js)

简介:穿插路程,是指快去快回,来去一阵风,走的快,走马观花,没有细品。细品那就要慢慢熬功夫喽。1.完成后的效果是:用户访问入口页面,录入信息,提交后结果以逐步添加的形式…