前端如何检测 iOS 越狱设备?

庆玲 阅读 51

我们 App 有安全要求,需要在前端判断用户是否使用越狱的 iPhone。试过用 JS 检测一些越狱路径,比如 /Applications/Cydia.app,但好像在 Safari 里根本没权限读文件系统啊?

有没有实际可行的前端方案?或者是不是只能靠后端配合?现在卡在这儿了,求真实经验。

我来解答 赞 15 收藏
二维码
手机扫码查看
1 条解答
夏侯文华
这个问题的关键是你说得没错——前端在 Safari 浏览器里确实没权限读文件系统,也访问不了任何系统底层的东西。所以纯 JS 在网页环境下检测越狱,理论上就很难做到。

但也不是完全没办法,具体取决于你的使用场景:

场景一:App 内的 WebView(Hybrid App)

如果是你们自己的 App 里面放的 WebView,那就可以通过 JSBrige 调原生方法,让 iOS 原生代码去做检测。这是目前最靠谱的方案。

原生代码检测越狱的手段就多了去了,比如:

// iOS 原生检测越狱的一些常用方法
func isJailbroken() -> Bool {
// 检查常见越狱文件是否存在
let jailbreakPaths = [
"/Applications/Cydia.app",
"/Library/MobileSubstrate/MobileSubstrate.dylib",
"/bin/bash",
"/usr/sbin/sshd",
"/etc/apt",
"/private/var/lib/apt/"
]

for path in jailbreakPaths {
if FileManager.default.fileExists(atPath: path) {
return true
}
}

// 检查能否写入系统目录
let testPath = "/private/jailbreak_test.txt"
do {
try "test".write(toFile: testPath, atomically: true, encoding: .utf8)
try FileManager.default.removeItem(atPath: testPath)
return true
} catch {
return false
}

// 检查 Cydia URL scheme 能否打开
if let url = URL(string: "cydia://package/com.example.package"),
UIApplication.shared.canOpenURL(url) {
return true
}

return false
}


然后前端这样调用:

// 通过 JSBrige 调用原生
window.NativeBridge.isJailbroken(function(result) {
if (result) {
console.log('检测到越狱设备');
// 可以做警告或者限制功能
}
});


场景二:纯网页(在 Safari 里打开)

这个就很受限了,但可以尝试一个投机的方法——检测某些 URL scheme 能否打开:

// 尝试打开 cydia URL,看能不能成功
function checkJailbreak() {
return new Promise((resolve) => {
const iframe = document.createElement('iframe');
iframe.style.display = 'none';
iframe.src = 'cydia://package/com.example.package';
document.body.appendChild(iframe);

// 如果能打开,setTimeout 不会触发(页面会跳走)
// 如果打不开,setTimeout 会正常执行
setTimeout(() => {
document.body.removeChild(iframe);
// 这里有个问题:现在浏览器安全限制很严
// 大概率会返回 false,即使设备越狱了
resolve(false);
}, 1000);
});
}


但说实话,这个方案在现代 iOS 上基本失效了。苹果从 iOS 9 开始对 URL scheme 的检测做了限制,你无法可靠地通过这个判断。

我的建议:

如果安全要求真的很高,别犹豫,直接走原生 + 后端:

1. App 启动时原生代码检测越狱状态
2. 原生把结果传给后端
3. 后端记录这个状态,前端请求时后端返回对应提示

纯前端方案在这个场景下就是治标不治本,越狱检测本身就是需要系统级权限才能做得靠谱的事儿。你前端能检测到的手段,越狱开发者也能想办法绕过去。
点赞
2026-03-16 19:01