【信息安全服务】代码审计之数据输入输出(二)

1.Xpath注入

(1)介绍Xpath

Xpath注入问发生在网站使用用户的信息查询XML数据时,通过发送异常信息,攻击者可以获取到敏感信息。在如果是认证

报文,攻击者可能通过XML文件提升自己的网站权限。

(2).存在Xpath注入的原因

与SQL注入类似,存在Xpath注入的原因在于对敏感字符(串)限制不严。Xpath解析器存在松散输入和容错特性,在正常表单后附加恶意查询代码,造成敏感信息的泄露。

(3)安全规范

在服务器端构造XPath查询语句之前,对提交的数据进行合法性校验,对特殊字符进行转义和替换。如进行XQuery参数化查询。

declare variable $username as xs:string extenal;
declare variable $password as xs:string extenal;
users/user[@username=$username and @password=$password]

调用XQuery,传参:

private boolean doLogin(HttpServletRequest request) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException {
    String userName=request.getParameter("username");
    String password=request.getParameter("userpass");
    DocumentBuilderFactory domFactory=DocumentBuilderFactory.newInstance();
    domFactory.setNamespaceAware(true);
    DocumentBuilder builder=domFactory.newDocumentBuilder();
    Document doc=builder.parse(request.getRealPath("WEB-INF")+"/users.xml");
		
    XQuery xquery=new XQueryFactory().createXQuery(new File(request.getRealPath("WEB-INF") + "/login.xq"));
    Map queryMap=new HashMap();
    queryMap.put("username",userName);
    queryMap.put("password", password);
    Object result = xquery.execute(doc,null,queryMap).toNodes();		
    NodeList nodes=(NodeList)result;
    return (nodes.getLength()>=1);
}

2.XML外部实体注入(XXE)

(1)介绍

        XML外部实体注入,英文XML External Entity Injection,所以又称XXE。

(2)存在注入原因

       针对XML终端实施的攻击,漏洞产生的原因是在于XML1.0标准引入“entity”概念,而且“entity”可以在预定义的文档中进行调用,XXE漏洞的利用原理在于通过实体标识访问本地或者远程内容。

(3)规范编码

       解析XML数据时,限制DTDs(doctypes)参数的解析可以解决此问题。

       规范代码示例:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
    // 这是优先选择. 如果不允许DTDs (doctypes) ,几乎可以阻止所有的XML实体攻击
    String FEATURE = "http://apache.org/xml/features/disallow-doctype-decl";
    dbf.setFeature(FEATURE, true);
}catch (ParserConfigurationException e) {
    // This should catch a failed setFeature feature
    ...
}catch (SAXException e) {
    // On Apache, this should be thrown when disallowing DOCTYPE
    ...
}catch (IOException e) {
    // XXE that points to a file that doesn't exist
    ...
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Keyli0n

赠人玫瑰 手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值