在任何时候,都应尽可能地避免动态的解析源代码。如果程序的功能要求对代码进行动态解析,应用程序不应该直接执行和解析未验证的用户输入。建议创建一份合法操作和数据对象列表,用户可以指定其中的内容,并且只能从中进行选择。
    例如:下面代码片段中,先判断用户提供的代码是否安全,再通过ScriptEngine执行用户提供的代码。

    1. ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
    2. ScriptEngine scriptEngine = scriptEngineManager.getEngineByExtension("js");
    3. userOps = request.getParameter("operation");
    4. Object result = null;
    5. if(isSafeCode(userOps)){
    6. result = scriptEngine.eval(userOps);
    7. }