http请求中http_referer使用错误的经典案例

      一般状况下,用户浏览须要登陆验证的页面a,咱们会将页面跳转到登陆页b,并带上页面a的url。在用户经过登陆验证后,跳转到页面a,让用户继续访问。php

      在咱们的项目里,我看到同事在php的登录验证接口login里,用$_SERVER['HTTP_REFERER']获取并输出referer,前端同事拿到referer并确保服务端确认用户经过登陆验证后,将页面重定向了referer。前端

      事实上,http请求中的referer,就是发起http请求的当前页面的url,并非当前页面的document.referrer。同事代码的结果就是,页面没有跳转到用户想访问的页面(即上述的页面a),而是再一次跳转到登陆页。浏览器

      通过查找资料得知,http_referer由浏览器生成,并非全部浏览器都会设置该值,http_referer能够伪造,不可信。此处login接口返回http_referer的作法并不稳当。url

      应该用php的current_url()获取用户当前访问页面的url(即页面a),判断用户须要登陆验证且用户未登陆,内部重定向到登陆页login并带上current_url()获取到的url。前端同事拿到这个url(假设为c),在获得服务单返回用户已经过登陆验证的响应后,把页面重定向到c。由于current_url()拿到的是页面a的正确url,因此用户能够继续访问页面a。接口

相关文章
相关标签/搜索