目标:实现也定的网页只能在自己开发的 APP 中打开,其他地方都不能打开该网页。 已知的方法有:
第一种方法:简单,但是最容易 workaround,直接改写 UA 就行了; 第二种方法:通过对客户端的请求抓包,一样可以很容易的破解; 第三种方法:破解难度大一些而已,但是也不是绝对地不可破解。就算有时间戳限制,但是在时间戳范围内,页面请求的 URL 还是可以通过抓包直接打开
请问大家有什么解决方案?像支付宝这种对安全性非常高的应用是采用的什么手段?
理论上不存在 100% 不可破解的方法。但只要设计一个方法使其破解成本远远高于破解收益便可认为不会被破解。第三种方法就是正途,对请求数据进行签名,主要在加密方法和密钥上面下功夫增加破解难度。时间戳这个,叫重放攻击,减少时间间隔可以增加攻击难度,也可以使用序号防止重复请求。不过也不存在 100% 安全的情况。
感觉还有一种思路,就是把 html 压缩,不是有什么 gzip 之类的压缩么。如果你用普通浏览器无法读的算法来压缩。然后通过定制 webview 或者用 js 调用本地模块 来解压缩。。。。
说的很有道理!查了很多资料,感觉一切的做法只是增加破解的难度。 感觉做这个东西首先要考虑的是“你想要保护的东西的价值是多大”,如果要保护的东西的价值不是很大,别人破解你的动力很小的话,没必要在防破解上整的很复杂。不过为了不断追求完美,还是应该学习一下这方面的知识。不断学习,防止被忽悠
要想高安全性,必然是影响用户体验,这是鱼和熊掌的关系。 如果只是防止浏览器访问你的网页 可以在你的 app 里面加特殊的请求头,一般的浏览器访问网页,请求头都是固定的 肯定不会发你 app 添加的请求头 用复制 url 的方法肯定搞不定 奇葩一点的话 可以修改 reponse-header 比如 什么 content-type 为 json 的 xml 啊,content-type 为 xml 的 html 啊 你自己的内置浏览器解析要搞好
常见的做法是在请求里面添加签名 保证请求是来自你的 app 因为你 app 不管怎么做 一般都不会防范使用 app 然后拿 app 的请求去抓包。
我突然想到一种神经病的做法 就是所有请求的返回码都是 404 这样浏览器就会忽略你 response-body 但是你可以在你的 app 里面继续使用
这种做法跟识别特定的 UA 是一样的道理,只能做基本的防护,用任一款网络请求分析工具都能看到 APP 发出去的 HTTP 请求的详细信息。
“我突然想到一种神经病的做法 就是所有请求的返回码都是 404 这样浏览器就会忽略你 response-body 但是你可以在你的 app 里面继续使用”你说的这种方法其实有人在用,就是 HTTP 请求得到的是加密后的 HTML 文本,只有自己的 APP 内的改造过的浏览器才能渲染,这种方法的破解难度要大多了
比较严格限制的需求下,可以着怎样做:APP 内发出的 HTTP 请求至服务器,服务器返回的是加密后的页面,客户端拿到加密后的页面后,解密,渲染。这个是目前很多 APP 采用的做法。