酸橘子网站开启了发货邮件通知,即后台员工点击发货时会自动发送邮件到用户预留的联系邮箱中,几乎国外的网站都是这样操作的,所以酸橘子也当仁不让的选用此种方式来通知用户。但不料没多久,不少用户反映自己明明没有点击邮件中的确认收货链接,但是进入个人中心却发现订单状态已经更改为了已经收到货的状态了。
初分析,图中链接是由recieve.php文件生成的,链接参数ver的值泄露,招到他人恶意点击,于是改了默认的算法,结果发现无效果,仍然测试中,订单会自动确认收货。再次查找ecshop内能改变订单状态为确认收货的文件,最后确认只有recieve.php这一个文件涉及到确认收货的环节。上服务器查看访问日志,确实是正常访问了带新算法值的正确参数,这就奇了怪了,不像是被人恶意为之。
再看一下访问地址,好像有点端倪,都是广东深圳的,难道还是某人恶意事件?
正在犹豫不决时,同事sky提醒到,该不会是QQ邮件防垃圾系统点的吧。这里说明一下,公司用的是QQ企业邮箱。尼妹的,看IP,深圳,100%应该是了。
由于Ecshop傻蛋的recieve设计是用户点了链接直接就改变订单状态到确认收货,而QQ邮件spam系统会自动去点邮件里的链接是不是垃圾或者广告地址,所以,用户就蛋疼了,全被点成确认收货了,只能改recieve了。
将之前的确认收货页面改成如下格式:
//确认页面 $act = !empty($_REQUEST['act']) ? rawurldecode(trim($_REQUEST['ver'])) : 'confirm'; // 验证码 if($act == 'confirm') { $msg = $order['order_sn']."确认收货?<button onclick="location.href='receive.php?act=receive&id=".$order_id."&con=".rawurlencode($consignee)."&ver=".$ver."';">确定</a>"; } //收货 else { /* 修改订单发货状态为“确认收货” */ ...... }
加一个确认的页面,这样SPAM点到链接后就不会触发订单状态更改的事件了,总算尼妹的解决问题了,Ecshop某些方面的设计真是秀下限啊。
不懂,好历害的样子。
如果是通过邮件来传送的肯定要注意这一点呀。
还有,在用户点击了链接后是通才QQ域名跳转的,在PHP中判断来源时是不是也有干扰?我到是不懂。