类型: 安全缺陷

    程序运行时动态解析源代码指令将易于受到攻击。

    1. ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
    2. ScriptEngine scriptEngine = scriptEngineManager.getEngineByExtension("js");
    3. userOps = request.getParameter("operation");
    4. Object result = scriptEngine.eval(userOps);

    如果operation参数是合法的,程序将会正常运行。例如:当该值为”8 + 7 * 2”时,result变量被赋予的值将为22。
    如果攻击者提供一个恶意的输入,程序在没有进行合理校验的情况,将产生代码注入攻击。如Javascript允许调用Java对象,如果攻击者计划将”java.System.RunTime.exec(“shutdown -h now”)”的值指定为operation,主机系统就会执行关机命令。