ECMall的一个登陆跳转Bug

  前几天在帮人做ECMall的易宝接口集成,第一次接触ECMall不熟悉支付插件的模式,也没时间去研究,而且这次集成的方式也不方便使用插件的模式,一时偷懒,直接在支付方式选择那写死了,支付结果返回验证也写在了同个app里,结果不知道为什么支付成功返回后老是会退出登陆,关键的问题来了,重新登陆后跳转回支付结果页面显示支付参数被篡改,仔细对比了一下支付成功返回的URL与登陆后的URL发现其中的参数原来有大写字母的,登陆成功后跳转回去的URL里的英文字母全部被转换成小写字母了,PHP变量名对大小写敏感,所以以RUL参数形式传递的数据就获取不到了,导致支付结果验证失败。

解析登陆过程代码,发现在文件app/frontend.base.php的login方法里有这么几行代码:

PHP代码
  1. /* 防止登陆成功后跳转到登陆、退出的页面 */  
  2. $ret_url = strtolower($ret_url);              
  3. if (str_replace(array('act=login''act=logout',), ''$ret_url) != $ret_url)  
  4. {  
  5.     $ret_url = SITE_URL . '/index.php';  
  6. }  

变量$ret_url是保存与传递登陆前的URL,用来登陆成功后跳转回登陆前的URL,在这里被小写化了。

将这几行代码改成这样:

PHP代码
  1. /* 防止登陆成功后跳转到登陆、退出的页面 */  
  2. if (str_replace(array('act=login''act=logout',), ''strtolower($ret_url)) != strtolower($ret_url)) {  
  3.     $ret_url = SITE_URL . '/index.php';  
  4. }  

这样一来就不会被转换成小写了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注