经常有外挂在 webview 中打开我们的页面, 然后修改页面中的数据. 故想让 js 判断出当前是不是运行在 webview 中, 有个思路是:检测 windows.external 比较 webview 和正常浏览器的异同,但是没找到相关的资料. 各位大佬有没有更好的方法或者资料呢?
1
p2pCoder 2018-09-15 11:15:14 +08:00
应该是没有办法,因为 webview 本身就是浏览器,很多参数也可以自己设置
你可以像央行征信那样搞个 ie 插件,限制在 ie 中,或者其他插件 不过对于大多数互联网产品是不可能这么设计的 当然,我只是 用 webview 开发过几个爬虫(就是类似的钓鱼逻辑),也不是专业的 android ios 开发,不过 webview 肯定比 selenium 这种服务端爬虫 还难针对 |
2
deepkolos 2018-09-15 11:18:48 +08:00
ua?
|
3
moult 2018-09-15 11:26:38 +08:00 via iPhone
无解。因为几乎所有的的浏览器其实也就是个 WebView 套壳,尤其是 iOS 下面。
|
4
shily 2018-09-15 11:28:37 +08:00 via Android
Android 请求 header 的 x-requested-with 了解一下
|
5
Hilong 2018-09-15 13:00:41 +08:00 via Android
咦,提供了一个爬虫的新思路,原来可以网页端直接发请求,我之前怎么没想到
|
6
p2pCoder 2018-09-15 13:24:33 +08:00
@Hilong https://github.com/zgbgx/appWeiboInfoCrawl
我倒是做过全套的,ios 和 android 包括 京东 淘宝 学信 征信(因为 IE 插件不可用) 和 电信运营商,核心就是 用户登录后,自动获取信息,用户 网贷 风控决策,建模,前后总共花了两个多月 不过最后因为公司规模也大 app sdk 在发版上不好搞,几个产品没扯皮过,也搁置了,滚回去做后端了 以后有机会还可以再搞搞,这东西就像 钓鱼和 僵尸一样,比较缺德 |
7
wangxiaoaer 2018-09-15 13:47:35 +08:00 via Android
@p2pCoder 是通过 webview 加载页面,同时在 webview 中注入自己的 js 去获取内容吗?这和浏览器插件没本质区别吧。
比如一些价格用假数字,真正的价格能过自定义的字体展示,即使在 webview 中,获取到的也是假的,还是要解析字体吧。 |
8
p2pCoder 2018-09-15 16:56:26 +08:00
@wangxiaoaer 核心不在于获取一些公共的信息,比如你说的商品清单
而是让 用户 输入 账号 密码后,登陆获取账户信息,比如四要素(姓名 身份证 电话 银行卡),账单,购物清单,花呗额度,白条信息,学信信息 通话记录等 其实,很类似钓鱼,这种需要登陆的用户征信的 爬虫和普通的电商 求职 等 请求 大量 列表的爬虫还是思路有很大区别的 |
9
enjoyCoding 2018-09-15 17:09:13 +08:00 via Android 1
webview 一般是安卓创建的吧,可以让安卓在 js 中加一个全局变量不,我看公司的代码中就有这种全局变量,只是不知道是从哪里来的,等周一上班后我看看,我也不确定是不是安卓那边给的。
|
10
xingyue 2018-09-15 17:34:37 +08:00 via Android
巧了我最近的项目就要页面判断是在 webview 中运行还是在手机浏览器中运行,通过 UA 判断可行度不高,需要提前和原生开发约定好一个方法用来判断,譬如判断有没有 window.android 这个对象
|
11
billyu 2018-09-15 18:12:48 +08:00 via Android
url 后面加个参数
|
12
ysc3839 2018-09-15 18:55:05 +08:00 via Android
没办法。即使是普通浏览器也可以修改数据。
|
13
opengps 2018-09-15 21:13:51 +08:00 via Android
可以防小白。但是不能防牛人,没办法彻底,毕竟可以完全模拟浏览器提交
|
14
murmur 2018-09-15 21:38:27 +08:00
webview 和浏览器有啥区别
安卓还允许用系统 webview 呢 |
15
liuwenxu 2018-09-15 22:45:11 +08:00 via Android
遍历方法和全局变量,有不同就关闭
|
16
janus77 2018-09-15 22:53:51 +08:00
案例是有的,比如微信内置浏览器,可以做到识别
不过技术细节不知道,你可以去尝试一下 |
17
POPOEVER 2018-09-15 23:21:01 +08:00
#4 楼 是正解,服务端拿 header 里的 X-Requested-With,然后直接返回出错
|