我有一个管理API的应用程序。 作为创建API的一部分,我们允许用户输入一些将在每次API被执行时执行的JavaScript。
此JavaScript在服务器端执行,因此流程为 -
预期用例是设置一些请求标题等。
现在,我们最近进行了安全审核,这当然打开了通往XXE漏洞的大门 -
var x='<?xml version="1.0"?><!DOCTYPE foo [ <!ELEMENT foo ANY ><!ENTITY lol SYSTEM "file:///etc/xxxx" >]><foo>&lol;</foo>';
var xee = new javascript.ScriptableDocument(x);
context.setVariable("request.queryparam.foo",xee.toString())
我将在Java中使用整个内容体,但如何阻止XEE漏洞?我可以想象我必须通过传入的JavaScript查找任何XML,并使用Java众所周知的XEE剥离方法之一(极好地描述here)。
但持久的黑客可能只是让我觉得任何识别JavaScript XML识别的尝试都是困惑的。 示例 -
var a='<', b="?" c="x";
new javascript.ScriptableDocument(a+b+c+...);
这是一场无法取胜的战斗吗?或者,我能做些什么来缓解这种情况?
谢谢! Zulfi