Cycode扫描建议在为iframe的 src赋值时进行HTML清洗,但我只是使用一个URL——应该采取怎样的缓解措施?
在我们的Angular应用中有如下代码:
const auth_token = sessionStorage.getItem('auth_token') ||
this.sessionStorage.retrieve('authenticationtoken') ||
localStorage.getItem('auth_token');
const loginUrl = `/api/sso/phoenix/callback?token=${auth_token}&return_to=/app/main/home`;
var iframe = document.createElement('iframe');
iframe.src = loginUrl;
iframe.style.display = 'none';
document.body.append(iframe);
Cycode会标记这行代码:
iframe.src = loginUrl;
并建议“在将用户输入插入HTML之前,使用一个HTML清洗库对输入进行清洗。”然而,我并不是将内容作为HTML插入,而只是把一个字符串赋给iframe.src。我理解对HTML插入时进行清洗很重要,但在这种情况下,loginUrl是一个URL字符串,而不是原始HTML。为了安全起见,我添加了一个正则表达式来校验auth_token,但扫描结果仍然显示相同的问题。这是误报吗,还是在这个情境下需要进一步的缓解措施?在用构造的URL设置iframe.src时,有什么推荐的方法来处理这个扫描器警告?
解决方案
Seikh Imran的回答在现代JavaScript中可能更为地道,但这种做法同样安全,只是稍显老旧:使用 encodeURIComponent 函数。
const auth_token = sessionStorage.getItem('auth_token') ||
this.sessionStorage.retrieve('authenticationtoken') ||
localStorage.getItem('auth_token');
const loginUrl = `/api/sso/phoenix/callback?token=${encodeURIComponent(auth_token)}&return_to=/app/main/home`;
var iframe = document.createElement('iframe');
iframe.src = loginUrl;
iframe.style.display = 'none';
document.body.append(iframe);
无需使用这种技术对硬编码的URL参数进行编码;很明显可以看到 没有危险字符 不需要转义。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。