SonarQube扫描JavaScript代码的正则安全热点问题解决咨询
解决SonarQube标记的URI正则表达式安全热点问题
原代码问题分析
你给出的代码里,正则/.*/$/完全无法实现“检查URI是否以/结尾”的预期逻辑:
.*是贪婪匹配,会匹配任意长度的任意字符(包括空字符串)- 搭配
$后,任何字符串都会通过这个测试,导致三元表达式的分支逻辑完全失效,后续URI处理可能出现异常,因此被SonarQube标记为安全热点。
修复方案
方案1:使用正确的正则表达式
将正则修改为专门匹配末尾/的/\/$/,这样才能准确判断URI是否以/结尾:
rootUri: /\/$/.test(sDataSource.uri) ? sDataSource.uri : sDataSource.uri + "/"
方案2:使用字符串方法(更高效清晰)
放弃正则,直接用endsWith()方法实现判断,代码可读性和性能更优:
rootUri: sDataSource.uri.endsWith("/") ? sDataSource.uri : sDataSource.uri + "/"
方案3:兼容老旧环境的字符串截取方式
如果需要兼容不支持endsWith()的老旧JavaScript环境,可以用字符串截取判断最后一个字符:
rootUri: sDataSource.uri.slice(-1) === "/" ? sDataSource.uri : sDataSource.uri + "/"
内容的提问来源于stack exchange,提问作者Manohar R
相关产品推荐
相关产品推荐

