csrf跨站请求伪造。
大家都知道,之前项目没有使用前后端分离方案时,成熟的框架解决方案都是在form表单当中增加隐藏列,这样每次提交时都会验证 token ,使用一次后销毁。例如:

<form action="//rasp.oneasp.com/account/modifyPassword">
  <input .....>
  <input type="hidden" name="__token__" value="xxxxxxx"/>
</form>

前后端分离情况下,该如何实现呢?
很简单,通过cookie,redis实现。
服务端提供一个接口(保证在同一域名下),生成_token_,将_token_写入到redis和cookie。前端再调用接口的时候,要带上这个token.使用一次后从redis中销毁。

public function testAction(){
    $_token_ = md5(uniqid());
    ...#把token存入到redis当中
    setcookie('_token_', $_token_, time()+(24*3600), '/');
    return false;
}

大家有什么好的方案,可以留言讨论。


hufeng
291 声望21 粉丝