如何判断页面是在 webview(或浏览器组件)中打开?

2018-09-15 11:00:00 +08:00
 Jamy

经常有外挂在 webview 中打开我们的页面, 然后修改页面中的数据. 故想让 js 判断出当前是不是运行在 webview 中, 有个思路是:检测 windows.external 比较 webview 和正常浏览器的异同,但是没找到相关的资料. 各位大佬有没有更好的方法或者资料呢?

8324 次点击
所在节点    JavaScript
17 条回复
p2pCoder
2018-09-15 11:15:14 +08:00
应该是没有办法,因为 webview 本身就是浏览器,很多参数也可以自己设置
你可以像央行征信那样搞个 ie 插件,限制在 ie 中,或者其他插件
不过对于大多数互联网产品是不可能这么设计的
当然,我只是 用 webview 开发过几个爬虫(就是类似的钓鱼逻辑),也不是专业的 android ios 开发,不过 webview 肯定比 selenium 这种服务端爬虫 还难针对
deepkolos
2018-09-15 11:18:48 +08:00
ua?
moult
2018-09-15 11:26:38 +08:00
无解。因为几乎所有的的浏览器其实也就是个 WebView 套壳,尤其是 iOS 下面。
shily
2018-09-15 11:28:37 +08:00
Android 请求 header 的 x-requested-with 了解一下
Hilong
2018-09-15 13:00:41 +08:00
咦,提供了一个爬虫的新思路,原来可以网页端直接发请求,我之前怎么没想到
p2pCoder
2018-09-15 13:24:33 +08:00
@Hilong https://github.com/zgbgx/appWeiboInfoCrawl
我倒是做过全套的,ios 和 android
包括 京东 淘宝 学信 征信(因为 IE 插件不可用) 和 电信运营商,核心就是 用户登录后,自动获取信息,用户 网贷 风控决策,建模,前后总共花了两个多月
不过最后因为公司规模也大 app sdk 在发版上不好搞,几个产品没扯皮过,也搁置了,滚回去做后端了

以后有机会还可以再搞搞,这东西就像 钓鱼和 僵尸一样,比较缺德
wangxiaoaer
2018-09-15 13:47:35 +08:00
@p2pCoder 是通过 webview 加载页面,同时在 webview 中注入自己的 js 去获取内容吗?这和浏览器插件没本质区别吧。

比如一些价格用假数字,真正的价格能过自定义的字体展示,即使在 webview 中,获取到的也是假的,还是要解析字体吧。
p2pCoder
2018-09-15 16:56:26 +08:00
@wangxiaoaer 核心不在于获取一些公共的信息,比如你说的商品清单
而是让 用户 输入 账号 密码后,登陆获取账户信息,比如四要素(姓名 身份证 电话 银行卡),账单,购物清单,花呗额度,白条信息,学信信息 通话记录等
其实,很类似钓鱼,这种需要登陆的用户征信的 爬虫和普通的电商 求职 等 请求 大量 列表的爬虫还是思路有很大区别的
enjoyCoding
2018-09-15 17:09:13 +08:00
webview 一般是安卓创建的吧,可以让安卓在 js 中加一个全局变量不,我看公司的代码中就有这种全局变量,只是不知道是从哪里来的,等周一上班后我看看,我也不确定是不是安卓那边给的。
xingyue
2018-09-15 17:34:37 +08:00
巧了我最近的项目就要页面判断是在 webview 中运行还是在手机浏览器中运行,通过 UA 判断可行度不高,需要提前和原生开发约定好一个方法用来判断,譬如判断有没有 window.android 这个对象
billyu
2018-09-15 18:12:48 +08:00
url 后面加个参数
ysc3839
2018-09-15 18:55:05 +08:00
没办法。即使是普通浏览器也可以修改数据。
opengps
2018-09-15 21:13:51 +08:00
可以防小白。但是不能防牛人,没办法彻底,毕竟可以完全模拟浏览器提交
murmur
2018-09-15 21:38:27 +08:00
webview 和浏览器有啥区别
安卓还允许用系统 webview 呢
liuwenxu
2018-09-15 22:45:11 +08:00
遍历方法和全局变量,有不同就关闭
janus77
2018-09-15 22:53:51 +08:00
案例是有的,比如微信内置浏览器,可以做到识别
不过技术细节不知道,你可以去尝试一下
POPOEVER
2018-09-15 23:21:01 +08:00
#4 楼 是正解,服务端拿 header 里的 X-Requested-With,然后直接返回出错

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/489565

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX