在 Electron 中如何限制页面跳转的域名

mulianju

共 1807字,需浏览 4分钟

 · 2023-08-25

Electron 作为一个开放的跨平台桌面应用框架,其中的网页内容也会存在一定的安全风险。为了加强应用的安全性,我们有时候需要限制 Electron 应用中 Web 页面只能在某些特定域名下进行跳转。本文将介绍在 Electron 中如何通过拦截页面跳转事件,来实现只允许跳转到指定域名的功能。

为什么需要限制域名跳转

Electron 应用中的网页与普通网页一样,都可以通过各种方式进行跨域跳转。这给应用带来一定安全风险,可能会导致以下后果:

  • 用户被恶意引导跳转到钓鱼网站中

  • 跨域资源可获取用户敏感信息

  • 应用功能可以被重定向到未知页面

因此为了避免这些安全问题,我们有必要限制 Electron 页面只能跳转到预设的特定域名下。

如何实现域名跳转限制

Electron 提供了全面的 API 可用于拦截和验证页面跳转,我们可以主要利用 webContents 模块实现跳转验证:

      
        const {BrowserWindow} = require('electron') 
      
      
        const allowedDomains = ['www.example.com'];
      
      
        
          
function createWindow () { const win = new BrowserWindow()
win.webContents.on('will-navigate', (event, url) => { const parsedUrl = new URL(url); if(!allowedDomains.includes(parsedUrl.hostname)) { event.preventDefault(); } }) }

主要步骤如下:

  1. 监听 will-navigate 事件,它会在页面发生跳转前被触发

  2. 检查跳转目标 URL 的域名是否在允许名单中

  3. 如果不在名单中,调用 event.preventDefault() 阻止跳转

这样就可以拦截掉所有非法跳转,只允许跳转到特定域名。

跳转验证的使用场景

跳转验证可以用于如下场景:

  • 业务网站只能跳转到自身域名下,不能跳转到随机站点

  • 论坛或社交应用只允许跳转到登录授权的站点

  • 企业内部应用限制只能访问内网站点

针对不同场景,我们可以灵活配置 allowedDomains 的域名白名单来实现不同效果。

will-navigate 事件的注意事项

  • will-navigate事件会在,页面window.location对象改变或用户点击页面上的链接时,触发执行。

  • 当在electron容器中使用webContents.loadURL和webContents.back API时,不会触发此事件。

  • 页面内部的导航也不会触发此事件,例如点击锚点或更新window.location.hash。如果需要监听页面内导航。如果要监听这些事件,可以使用did-navigate-in-page。

总结

Electron 提供了丰富的 API 可以拦截和控制页面跳转,开发者可以利用这一点来加强应用的安全性。本文介绍了使用 will-navigate 事件实现域名跳转限制的方法,可以避免恶意跳转带来的风险。在 Electron 开发中,合理启用此类安全保护措施是非常必要的。


浏览 15
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报