cordova-plugin-alipay icon indicating copy to clipboard operation
cordova-plugin-alipay copied to clipboard

内嵌商户私钥会不会泄露?

Open zhougn opened this issue 9 years ago • 6 comments

目前的用法要把商户私钥内嵌在插件源代码中,并会被编译到客户端app当中,这样会有商户私钥泄露的风险。

看起来这个私钥的唯一用途是要在客户端进行签名,但是签名这个过程完全可以在服务器端完成,这样能避免私钥泄露。

@chen4342024 请问有必要担心这个问题吗?支付宝商户私钥泄露算不算是个问题呢?

zhougn avatar Aug 27 '15 09:08 zhougn

细看了下发现支付金额也需要这个私钥来签名,那这个私钥泄露的后果还是挺严重的,可以用来篡改支付信息

               String out_trade_no = args.optString(0);
                String subject = args.optString(1);
                String body = args.optString(2);
                String total_fee = args.optString(3);
                String url = args.optString(4);

                //服务器异步通知页面路径,需要自己定义  参数 notify_url,如果商户没设定,则不会进行该操作
                //String url = "http://host:port/path/Alipay/notify_url.aspx";

                final String orderInfo = getOrderInfo(out_trade_no,subject, body,total_fee,url);

                String sign = sign(orderInfo);
                try {
                    // 仅需对sign 做URL编码
                    sign = URLEncoder.encode(sign, "UTF-8");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }

zhougn avatar Aug 27 '15 10:08 zhougn

恩。支付宝官方建议是把私钥保存在服务端。但是,由于我的插件并没有投入商业使用,所以并没有解决,欢迎帮忙完善一下

chen4342024 avatar Aug 27 '15 14:08 chen4342024

试着把签名相关的代码移除之后,剩余的代码极少,基本上这个简单的项目就能满足需求了:

https://github.com/sinofool/cordova-alipay-plugin

zhougn avatar Aug 28 '15 08:08 zhougn

@zhougn 确实代码变得极少,看起来像是直接封装了sdk的cordova plugin。但是缺点是paystr如果错了的话,很难debug,支付宝的sdk不友好是有目共睹的啊,要不然为什么要提供稍微详细一些的demo呢。个人更喜欢现在这个方式。 @chen4342024 如果能把私钥、签名这些都放在js接口那边做个参数就好了,用的人如果连私钥存在js里面都能接受,那就说明人家的私钥只存在app上就行了。

SeanWangDev avatar Sep 22 '15 03:09 SeanWangDev

@SeanWangDev 私钥之类的还是推荐放在服务端会好一点, 比较安全

chen4342024 avatar Mar 08 '16 01:03 chen4342024

@chen4342024 没错,最终的实现是这样的。plugin只接收一个参数,就是paystr。这个url不在前端组装了。直接在后端做一个类似微信的prepay操作,然后从后端返回组装好的paystr。这样暴露信息的几率低,可以在后台跟踪用户的支付操作。而且将来如果alipay更新了,只要还是paystr,就不担心改js。

SeanWangDev avatar Mar 08 '16 06:03 SeanWangDev