作者MIM23 (HAWK)
看板AndroidDev
标题Re: [问题] 跟Web Server之传递资料的方式
时间Tue Jan 19 15:07:46 2016
※ 引述《flyroy (夫莱罗伊)》之铭言:
: 请问大家在写Android时,遇到需传递密码之类的资料是怎麽传递
: 目前想法是先用AES加密後在用BASE64加密成字串传到WEB SERVER
: SERVER接到在转回来,有更好的方式可推荐吗?
: 如果与Server连结改用SSL方式传递
: 是不是就可以不用像上面方法这麽麻烦?
在internet上传输资料就会有被窃听、窃取的风险
这样的攻击行为通常被称为 中间人攻击 MITM(Man in the middle)
所以为了确保资料安全,通常会使用SSL/TLS协议来做基本的保护
(其实不太想写SSL,因为SSL 3.0也是不安全的,漏洞为Poodle)
使用了TLS协议做传输也不代表资料就是安全的,其实还是会有MITM的问题
只要中间人使用自己的凭证做攻击照样能看到传输的资料
现今的浏览器通常遇到自签的凭证或是不合法的凭证都会跳一个讯息
"此网站的安全性凭证有问题",不过使用者大多还是会按"继续浏览此网站"
所以在Client端的应用程式上我们可以这样做:
1.Https握手时检查Server端给的x509凭证上的公钥是否正确
2.资料本身做加密(对称或非对称加密)
不过之前自己分析了台湾许多的APP(行动银行、行动支付)
行动银行APP也都只有使用SSL/TLS协议而已,而且敏感资料也不加密
只有少数的行动支付APP才有做上面讲的那二种做法
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.135.31.21
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1453187269.A.E7B.html
※ 编辑: MIM23 (220.135.31.21), 01/19/2016 15:12:39
1F:→ ssccg: 内建的sslsocket连线时会验证凭证是否为OS信任的root CA所 01/19 15:20
2F:→ ssccg: 签发、凭证中列的domain与要连线的domain是否相符 01/19 15:21
3F:→ ssccg: 跟浏览器的检查是一样的,通常中间人用自己的凭证是无法成 01/19 15:22
4F:→ ssccg: 功建立连线的(Android/Java会丢出SSLHandshakeException) 01/19 15:23
5F:→ ssccg: 只是有些人懒得申请凭证用自签的,然後就照网路上的教学用 01/19 15:24
6F:→ ssccg: 改写TrustManager和HostnameVerifier才会被攻击 01/19 15:26
7F:→ ssccg: 这种正确作法是用你说的1把自签的公钥写死在client检查 01/19 15:26
8F:→ ssccg: 如果用public trust的凭证,通常是没有MITM的问题的 01/19 15:28
原来如此,感谢高手补充
我的做法是强制让Android信任不合法的凭证方式去监看封包
这种方式不会跳SSLHandshakeException,当然不可否认这种是比较特殊的做法
但有些程式是检查公钥不同就中断了,就无法偷看程式送了什麽
OWASP
http://tinyurl.com/kz8jovw
※ 编辑: MIM23 (220.135.31.21), 01/19/2016 16:05:23
9F:推 KeySabre: 推一下重要的文 01/20 12:56
10F:推 flyroy: 很重要,但我听的雾沙沙... 01/21 22:41