Jmeter访问网站返回403(CSRF verification failed. Request aborted.)
django网站自带CSRF校验,所以jmeter直接请求时会出现校验不通过的情况
一、CSRF校验
CSRF是指跨站请求伪造,CSRF攻击的流程大概是我们登录网站A后存在本地的cookie,之后打开了另一个危险网站B,这个网站B使用本地cookie向网站A发起请求(该请求不是用户主动发起,是个恶意请求),网站A误以为是用户本人发起的请求,从而绕过登录执行一些本人才能执行的非法操作,这就是说网站A遭到了CSRF攻击
CSRF校验就是为了避免这种攻击,django的CSRF校验是通过同时收到csrftoken和csrfmiddlewaretoken,再对这两个值进行比较校验
二、问题解决
根据以上得知,我们用jmeter 发起请求时需要带csrftoken和csrfmiddlewaretoken
- 使用一个get请求get_cookie,获得csrftoken和csrfmiddlewaretoken
- 添加HTTP Cookie Manager获得Cookie中的csrftoken,并自动在正式请求Request2时带上这个Cookie
- 添加察看结果树
- 运行请求get_cookie,查看返回
可以看到返回中带有一个隐藏属性<input type="hidden" name="csrfmiddlewaretoken"……>
这个就是要找的值 - 在get_cookie请求添加Xpath提取器,解析返回值,取csrfmiddlewaretoken放入到变量csrfmiddlewaretoken中
- 在请求Request2中添加参数csrfmiddlewaretoken
- 再次请求成功