Cycode扫描建议在为iframe的 src赋值时进行HTML清洗,但我只是使用一个URL——应该采取怎样的缓解措施?

前端开发 2026-07-10

在我们的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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章