c_transnum="" or c_succmark="" or c_signstr="" THEN
response.write "支付信息有误"
response.end
END IF
’---将获得的通知信息拼成字符串,作为准备进行MD5加密的源串,需要注意的是,在拼串时,先后顺序不能改变
Dim c_pass ’商户的支付密钥,登录商户管理后台(https://www.cncard.net/admin/),在管理首页可找到该值
c_pass = "Test"
srcStr = c_mid & c_order & c_orderamount & c_ymd & c_transnum & c_succmark
& c_moneytype & c_memo1 & c_memo2 & c_pass
’---对支付通知信息进行MD5加密
r_signstr = MD5(srcStr)
’---校验商户网站对通知信息的MD5加密的结果和云网支付网关提供的MD5加密结果是否一致
IF r_signstr〈〉c_signstr THEN
response.write "签名验证失败"
response.end
END IF
’---校验商户编号
Dim MerchantID ’商户自己的编号
IF MerchantID〈〉c_mid THEN
response.write "提交的商户编号有误"
response.end
END IF
’---校验商户订单系统中是否有通知信息返回的订单信息
Dim conn ’商户系统的数据链接
sql="select top 1 数据列 from 商户的订单表 where 商户订单号="& c_order
set rs=server.CreateObject("adodb.recordset")
rs.open sql,conn
IF rs.eof THEN
response.write "未找到该订单信息"
response.end
END IF
’---校验商户订单系统中记录的订单金额和云网支付网关通知信息中的金额是否一致
Dim r_orderamount ’商户自己系统记录的订单金额
r_orderamount=rs("订单金额") ’商户从自己订单系统获取该值
IF ccur(r_orderamount)〈〉ccur(c_orderamount) THEN
response.write "支付金额有误"
response.end
END IF
’---校验商户订单系统中记录的订单生成日期和云网支付网关通知信息中的订单生成日期是否一致
Dim r_ymd ’商户自己系统记录的订单生成日期
r_ymd=rs("订单生成日期") ’商户从自己订单系统获取该值
IF r_ymd〈〉c_ymd THEN
response.write "订单时间有误"
response.end
END IF
’---校验商户系统中记录的需要在支付结果通知中转发的参数和云网支付网关通知信息中提供的参数是否一致
Dim r_memo1 ’商户自己系统记录的需要在支付结果通知中转发的参数一
r_memo1 = rs("转发参数一")
Dim r_memo2 ’商户自己系统记录的需要在支付结果通知中转发的参二
r_memo2 = rs("转发参数二")
IF r_memo1〈〉c_memo1 or r_memo2〈〉c_memo2 THEN
response.write "参数提交有误"
response.end
END IF
’---校验返回的支付结果的格式是否正确
IF c_succmark〈〉"Y" and c_succmark〈〉"N" THEN
response.write "参数提交有误"
response.end
END IF
’---根据返回的支付结果,商户进行自己的发货等操作
IF c_succmark="Y" THEN
’根据商户自己商务规则,进行发货等系列操作
END IF
%〉
我们可以看到他的验证签名的方式,是将银行反馈过来的信息链接后和在提交页面提交的信息,
先看签名是如何验证的:
’---将获得的通知信息拼成字符串,作为准备进行MD5加密的源串,需要注意的是,在拼串时,先后顺序不能改变
Dim c_pass ’商户的支付密钥,登录商户管理后台(https://www.cncard.net/admin/),在管理首页可找到该值
c_pass = "Test"
srcStr = c_mid & c_order & c_orderamount & c_ymd & c_transnum
& c_succmark & c_moneytype & c_memo1 & c_memo2 & c_pass
’---对支付通知信息进行MD5加密
r_signstr = MD5(srcStr)
’---校验商户网站对通知信息的MD5加密的结果和云网支付网关提供的MD5加密结果是否一致
IF r_signstr〈〉c_signstr THEN
response.write "签名验证失败"
response.end
END IF
是通过提交的这些信息加密后来验证的,而商户的支付密钥,我们可以在提交页面获取到!而这里他程序需要添加上去的!
我们就不需要了,我们需要的只是让r_signstr等于c_signstr 就可以搞定它了!欺骗方法我就不说了!
至于其他的欺骗,不存在加密了,全部明文的了!很容易就过去了!
ps:这个作者当时还发了一个别的也是在线支付漏洞的动画,我看都没有看就删了.你信这个动画吗?反正我是不信!
更多ECSHOP内容来自木庄网络博客
标签:ECSHOP
相关阅读 >>
ECSHOP使用支付宝支付成功后提示“此支付方式不存在或者参数错”的解决方法
php 出现strict standards only variables should be passed by reference in的解决方法
ECSHOP模版系统assign和include模版标签使用介绍
php中使用substr()截取字符串出现中文乱码问题该怎么办
更多相关阅读请进入《ECSHOP》频道 >>