AngularJS使用eval()触发SonarQube Code Injection(RCE)报错修复求助
修复方案
一、翻译指令中eval() RCE风险修复
你当前代码的风险来源为直接使用eval()执行用户可控的$scope.value参数,一旦传入恶意构造的JS代码片段,将直接触发远程代码执行。
修复方案:用JSON.parse()替代eval()
如果你使用eval('(' + $scope.value + ')')的目的是将JSON格式字符串转为JS对象,直接替换为JSON.parse()即可,同时补充异常捕获逻辑处理非法输入:
$scope.$watch('value', function() { if ($scope.value) { $scope.value = $scope.value.trim(); if (/^[A-Z0-9|_]*$/.test($scope.value)) { var translatedValue = translator[$scope.value]; // 若translator内容不可信,建议替换为element.text(translatedValue)避免XSS element.html(translatedValue); return; } else { try { // 替换eval为JSON.parse var value = JSON.parse($scope.value); translateItem(value); } catch (e) { // 非法格式输入自定义兜底逻辑,比如直接展示原内容、报错提示等 element.text($scope.value); } } } });
如果你的业务场景确实需要执行动态表达式而非解析JSON,也禁止直接使用eval(),可采用白名单机制:提前预设允许执行的表达式列表,仅当用户输入匹配白名单规则时才执行对应逻辑,完全屏蔽用户输入直接作为代码执行的路径。
二、jQuery同类RCE报错修复
jQuery触发同类报错通常是因为使用了存在安全漏洞的旧版本,或是调用jQuery方法时传入了用户可控的未过滤内容,修复方案如下:
- 优先将jQuery升级到官方维护的安全稳定版本(3.7.x及以上),修复官方已披露的注入类安全漏洞
- 所有传入jQuery方法的用户可控内容都做安全处理:插入内容时优先使用
.text()而非.html(),如果必须插入HTML内容,先经过XSS过滤工具处理 - 禁止直接将用户输入的字符串作为选择器、事件回调代码传入jQuery的相关方法
内容的提问来源于stack exchange,提问作者Ranjan Singh
相关产品推荐
相关产品推荐

