一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的“测试带有CSRF Token防护的接口”。
为了防止CSRF的攻击,现在几乎所有的网站在POST请求的时候都加上了csrftoken,系统通过post参数中的一个hidden元素获取一个随机的由100个字符组成的串,在发送的时候与某个cookie值进行比较,如果二者相同,则进入下面的操作,否则这给出403异常页面。为了对这类产品进行接口测试,可以阅读源代码获得hidden元素名,通过抓包获得cookie名,然后通过post的cookie选项将hidden元素名对应的值和cookie名对应的值保持一致,即可实现。
案例4-90:测试登录功能带有csrftoken的接口测试。
#csrftoken
import requests
import unittest
def setUp(self):
self.correctusername ="cindy"
self.correctpassword ="123456"
self.discorrectusername ="jerry"
self.discorrectpassword ="000000"
self.url="http://localhost:8000/login_action/"
self.token = "RNF3Y04qFeJkMwCDsTMn4gfMcyfQ2vUjXbcENLADEFyCSRp1pBdezZKwHhlSwqgE"
self.cookie = {"csrftoken":self.token}
class login(unittest.TestCase):
#正确的用户名,正确的密码
def test_correctusername_correctpassword(self):
payload={"username":self.correctusername,"password":self.correctpassword,"csrfmiddlewaretoken":self.token}
data = requests.post(self.url,data=payload,cookies=self.cookie)
#验证返回码
self.assertEqual("200",str(data.status_code))
#验证返回内容
self.assertIn("电子商务系统" ,str(data.text))
在这里,仅展示输入正确的用户名和正确的密码用例。通过语句payload={"username":self.correctusername,"password":self.correctpassword,"csrfmiddlewaretoken":self.token}设置hidden参数的值为self.token,通过data = requests.post(self.url,data=payload,cookies=self.cookie)(其中self.cookie在setUp中设置为self.cookie = {"csrftoken":self.token})也设置为self.token值。