服务专业公司网站建设服务全国高端网站
问题1——动态解析代码
 程序运行时动态解析源代码指令将易于收到攻击。  
 
 
 例:下面代码片段中,通过  ScriptEngine  执行用户提供的代码。  
 
 
 ...  
 
 
 ScriptEngineManager scriptEngineManager = new ScriptEngineManager();  
 
 
 ScriptEngine scriptEngine = scriptEngineManager.getEngineByExtension("js");  
 
 
 userOps = request.getParameter("operation");  
 
 
 Object result = scriptEngine.eval(userOps);  
 
 
 ...  
 
 
 如果  operation  参数是合法的,程序将会正常运行。例如,当该值为 "8 + 7 * 2"  时, result  变量被  
 
 赋予的值将为  22 。  
 
 
 如果攻击者提供一个恶意的输入,程序在没有进行合理校验的情况,将产生代码注入攻击。如  
 
 Javascript  允许调用  Java  对象,如果攻击者计划将  "java.System.RunTime.exec("shutdown -h now")" 的值指  
 
 定为  operation ,主机系统就会执行关机命令。 
 
 当将输入数据( web  前端、网络、数据库)作为程序代码( java )代码部分进行动态驱动和执行,给  
  攻击者带来注入攻击的环境和可能 
 
修复1——动态解析代码
 对圆括号、星号、逻辑操作符、关系运操作符在应用层都必须过滤在任何时候,都应尽可能地避免  
 
 动态的解析源代码。如果程序的功能要求对代码进行动态解析,应用程序不应该直接执行和解析未验证的  
 
 用户输入。建议创建一份合法操作和数据对象列表,用户可以指定其中的内容,并且只能从中进行选择。 
 
 对动态执行代码中用到的数据进行严格检查、过滤,即便数据来自数据库、内存。 
   问题2——正则表达式注入 
  当将数据作为正则表达式的一部分进行拼接,就可能导致被攻击 
   修复2——正则表达式注入 
  对使用的数据进行严格的转移、例如:() ]\?*[ { }]| 等进行转义 
  Js  中对使用的数据未做安全检查,并作为  html  的一部分进行动态创建  DOM ,导致攻击。 
  Js  中对使用数据进行  html  转义 
 