一个内部系统,但是部署在公网上的,用户都是用 chrome 访问,基于安全性考虑加 IP 访问限制,但是有些用户没有固定公网 ip 或者甚至可能有移动设备访问。
有没有什么办法像 app 那样取到设备信息呢,加设备白名单限制访问
![]() | 1 8355 249 天前 ![]() UA 吗。。。 随便伪造 最好是借助一些外部系统跳转做 sso ,类似钉钉/飞书登陆,其实你的核心诉求是鉴权用户而不是鉴权设备。 合法用户的所有设备都可用才对 |
![]() | 2 UnluckyNinja 249 天前 via Android http 请求是可以自己构造的,设备信息不靠谱,加个 auth 模块吧 |
![]() | 3 w292614191 249 天前 如果 nginx 之类的能限制 MAC 地址就好了。 |
![]() |   4 w292614191 249 天前 我之前翻了一圈,希望能在云服务器限制 mac 地址,结果没什么好的办法。 |
![]() | 5 mightybruce 249 天前 既然都是浏览器访问,考虑一下浏览器指纹,使用一些成熟的浏览器指纹库,基本不管你 IP 和 浏览器头部做一些变化都能独立识别用户。 |
![]() | 6 mightybruce 249 天前 比如这个 js 库的 demo https://fingerprint.com/demo/ |
7 liuidetmks 249 天前 @w292614191 不可能的,除非你在应用层获取 mac |
![]() | 8 leo7476040305 249 天前 via iPhone ![]() 套一层 VPN ,VPN 服务器固定 IP ,只允许 VPN 服务器 IP 访问 |
9 kristofer 249 天前 加个登陆验证? |
10 djs 249 天前 上面老哥说的浏览器指纹可以考虑下 |
11 fox0001 249 天前 via Android 内部系统不需要用户登录的吗?如果需要,就是登录验证、二次验证等的解决方案。如果不需要登录,可以考虑颁发证书的形式。 |
12 poxiaogg 249 天前 可以用双向证书 |
![]() | 13 wangtian2020 249 天前 看你是防君子还是防小人,结果上来说就是小人防不住。 |
14 HangoX 249 天前 搭建个 vpn 吧,要么用 openvpn ,要么用 tailscale ,这样安全性会高很多 |
15 skallz 249 天前 ![]() @mightybruce 浏览器指纹只能作为辅助识别用户的手段,不能作为唯一识别用户的手段,你可以看到任何指纹库其准确率都到不了 100%,哪怕是你发的这个 npm 文档上也写了准确率为 40%至 60% |
16 skallz 249 天前 这种需求加个 auth 模块吧,接入微信钉钉飞书就行 |
17 czk1997 249 天前 要求 SSO 。设备纳入 MDM ,加证书登录。或者类似 Cloudflare ZeroTrust 这样的方案。 |
![]() | 18 wheat0r 249 天前 如果用户都在一个或几个固定的网络里,用内网的防火墙解决问题 |
![]() | 19 htfcuddles 249 天前 你需要的是 SSO+Device Enrollment ,例如 MS 的 Intune |
![]() | 20 xiri 249 天前 via Android ![]() @w292614191 mac 地址只在局域网有效,出了网关看到的就都是网关的 mac 地址了,你这个不可能实现的,除非你自己实现应用端和服务端,把 mac 地址封装到数据载荷里 |
![]() | 21 EndlessMemory 249 天前 搞个账号不好吗 |
![]() | 22 815979670 249 天前 套一层 webvpn 内部系统只允许通过 webvpn 访问,webvpn 不逊用户额外装什么软件 直接用浏览器访问 |
23 zgsi 249 天前 天啊,这问题不就是我年前遇到的。web 在公网,但是只给公司内部用。ip 是变化的。 想了一圈,最后闲着无聊写了个 chrome 插件,请求接口的时候追加 auth 鉴权 |
![]() | 24 ysc3839 249 天前 via Android 客户端证书,或者 http basic auth ,用户名+密码就相当于 token |
![]() | 25 totoro625 249 天前 弄个 web 界面,让他们访问之前点击相应的链接把 IP 添加到白名单内,再访问这个系统 |
![]() | 26 luolw1998 249 天前 cloudflare Zero Trust |
27 zgsi 249 天前 |
29 zgsi 249 天前 @imherer 内部泄露那没办法了。你给他账号密码他一样给别人。我目前这样实现了。目前测试观察阶段很稳定。我目前弊端是要刷新才会生产新的 auth ,后期可能会考虑登录后的状态有效期给长一点来解决。 如果你有了好的解决方案,麻烦踢下我! |
![]() | 30 KagurazakaNyaa 249 天前 试试 mtls 吧,或者基于 FIDO 的设备 passkey |
32 chobitssp 249 天前 TOTP 动态口令 |
33 johnhuangemc2 249 天前 IP 限制 + VPN 我们把敏感网站限制成仅公司 IP 可访问, 然后在公司网络部署 OpenVPN, 敏感网站添加 VPN 路由配置走 VPN, 要访问敏感网站就开启 VPN 访问 |
![]() | 34 Lemon2ee 249 天前 我也建议从网络层面解决问题。 部署一个 tailscale subnet router 在服务傍边,广播服务 ip 部署一个 tailscale client 在公司内部,添加路由规则 即可达到内部可以访问服务,并且服务无法直接访问公司内部网络 (大概是这样的,没实战过 |
![]() | 35 cxh116 249 天前 客户端证书应该是比较成熟的方案吧。楼上有提到,在 nginx 里也可以实现。还可以每个客户端装不同证书,吊销指定的客户端证书。 https://developers.cloudflare.com/ssl/client-certificates/ |
37 zgzhang 249 天前 你搜索的是 JS 设备指纹 |
![]() | 38 musi 249 天前 不然还是用 electron 包个浏览器吧,你想做的都能实现 |
![]() | 39 Karte 249 天前 如果真的想进行设备上的限制, 那尽可能做个桌面端. 桌面端获取系统信息然后判定. 如果只想确保登录的人员是合法的, 那尽可能增加双重验证, 或者使用目前最新的认证方案: passkey. passkey 可以让用户不通过账户名和密码登录, 只需要手机扫描登录的二维码, 然后通过蓝牙与主机交互确认登录. |
![]() | 41 Karte 249 天前 具体可以在 (passkey)[https://passkey.org/] 网站进行了解. |
45 zgzhang 249 天前 JS 设备指纹的确没那么文档,但绝大部分场景够用,我再给你个思路,很多企业用零信任解决这个问题,用零信任限制只有某些人和某些设备,可以访问你的系统 |
47 ssiitotoo 249 天前 只允许公司出口和 vpn 地址访问 非办公区需要使用 vpn 才能访问 |
49 zgzhang 249 天前 @imherer 你理解的零信任不对,你说的只是登录验证,https://www.alyun.com/product/security/csas ,参考类似的产品 |
50 impaa 249 天前 via Android azure ad 可以做到,配合件式存取,面有 id ,如果 edge 直接支持,如果 chrome 要安微出的插件 |
![]() | 51 Karte 249 天前 |
52 NSAgold 249 天前 via Android 配个客户端证书 |
53 mooyo 249 天前 你这个标准的 zero trust 需求,用户和你能连接到国际互联网的话,使用 cloudflare zero trust 免费版就能解决了。 添加一个 application ,使用邮箱验证,把用户的邮箱加进去,每次打开的时候需要使用邮箱获得一个验证码进入。 |
55 xiayun 249 天前 ssl 双向证书认证? sso ? |
![]() | 56 liuzimin 249 天前 说到零信任准入,我找到一个叫 NetBird 的开源项目,看上去好像可以满足要求。https://github.com/netbirdio/netbird?tab=readme-ov-file |
57 fiveStarLaoliang 249 天前 可以考虑硬件令牌( HOTP ),类似于 U 盾,一机一码单点登录,这样就算泄密,也能追踪到个人 |
![]() | 58 internelp 249 天前 可用的方案: 1 、客户端证书 2 、HTTP basic auth 3 、VPN |
![]() | 59 irisdev 249 天前 楼上好多说 vpn 的,vpn 可以限制指定设备安装吗 |
![]() | 60 IvanLi127 249 天前 首先设备是受控的,如果不是,没得做。 然后 mtls 就行了。 |
![]() | 61 54xavier 249 天前 @mightybruce #6 我也觉得这个方案 OK ,只要浏览器登录过一次 给这个账号记录一次浏览器指纹,之后这个账号都只能是这个指纹才能登录,指纹不对了就需要重新申请绑定新指纹 ![]() |
62 n18255447846 248 天前 webauthn 不用账密基于设备,新的浏览器原生 api |
![]() | 63 liuzimin 248 天前 ![]() @irisdev tailscale 后台就可以开启设备接入认证,每个新设备都需要管理员去后台 approve 允许了才能接入。所以我觉得原理上讲 vpn 限制设备是行得通的。 |
![]() | 64 xugj 248 天前 多年前做过现在也一直在用,客户端是桌面程序获取本级 MAC 地址并在服务端绑定,客户端发送 MAC 地址、局域网 IP 等信息服务端验证通过调用浏览器打开指定地;不知道这样会不会有什么安全隐患? |
65 han3sui 248 天前 每次登录加个短信验证码 |
![]() | 66 kalthus 248 天前 记得很多年前有过类似的需求,当时是写了个 activex 获取设备的 mac 地址(现在好像没有 activex 了?) |
![]() | 69 Leeeeex PRO 我们用的就是 ip 白名单,至于没有公网 ip 或者没有固定 ip 的用户就给他们加临时白名单,大部分时间都是在固定场所登录的。 |
![]() | 70 wangyzj 248 天前 浏览器指纹 |
![]() | 71 JEME 248 天前 via Android 你是否在找,堡垒机,或者特权访问系统 |
72 listenerri 248 天前 为什么不用系统防火墙呢,针对业务端口设置 IP 白名单 |