如果项目前后分离,前端只能用ajax调用后端接口获取数据,那后端如何判断请求来源?
1. 通过类似token:
1.1、是要后端提供一个token接口,然后前端通过接口获取token。(接口都有了那说明谁都可以拿到token。不靠谱)
1.2、后端提供token + 请求域名白名单。(通过HTTP_REFERER 获取请求域名来源进行判断....不太靠谱)
1.1、是要后端提供一个token接口,然后前端通过接口获取token。(接口都有了那说明谁都可以拿到token。不靠谱)
1.2、后端提供token + 请求域名白名单。(通过HTTP_REFERER 获取请求域名来源进行判断....不太靠谱)
除请求的用户相关认证与鉴权。
请求带上csrf token,后端认证,
设置Access-Control-Allow-Origin,
后端非特殊情况关闭外网映射,必要时还可以上ip白名单
综合使用已经足够安全了。
token 后端提供的token接口是要验证用户信息的
不是说我一个get请求过来就给你一个token
token的信息当中可以包含 你的客户端来源 基本用户信息 过期时间等
token
一般是登录后后端返回的,前端负责存下中,下次ajax请求的时候都会带上这个token
,后端则对这个token
做合法性校验,通过则继续,不通过则返回一个token
失效的状态码,前端根据状态码自动跳转到登录页面。
/login
接口,把用户名和密码POST上来,PHP为该用户生成一个token
并返回给前端。token
保存在浏览器的localStorage
中。token
,可以通过header
中的Authentication
头发送。token
有效就能识别用户,执行操作。token
无效,可以返回401错误给前端,JS将用户引导到登录页面判断请求来源,
可以设计接口统一一个header或 get post 参数 type 过来
如:type=h5 就是h5 ,type=android 就是 安卓 ,还有ios
,或者你token 就带上 type 比如 xxxtoken,token=h5 ,后端过来后 获取token是校验,和类型则是你要的来源
13 回答12.6k 阅读
7 回答1.7k 阅读
5 回答1.3k 阅读
3 回答1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
5 回答2.2k 阅读
前后端分离之后,判断来源的目的基本都是保障安全性,只是鉴定来源的话request header里面的origin是不是可以用一下?然后通过token、jwt等一系列的鉴定机制,再试试?
但是个人觉得只要这个token能带到客户端,就有危险,所以分离之后为了安全,更倾向于以下方案
1、前后端分离之后,前端使用nginx作为服务器,并且反向代理到后端接口,注意这里反向代理到后端服务器的内网IP+端口上去,并且关掉后端域名的外网映射
2、接口服务器上接到请求之后,可以查一下X_forward_for的ip链路,看下中间的代理IP是不是自己nginx服务器的,加个白名单
3、如果实在需要开放外网映射去做一些诸如授权、支付类的功能的话,nginx层依旧保持内网ip转发,添加域名访问的白名单,包括域名和ip
大致就这样~