网络公司 营销型网站郑州抖音推广
问题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 转义