因此对于网站中涉及到数据库更新操作的update,add,delete操作,不要使用get请求,而必须需要使用post请求,原因解析:
1.get请求默认是可以跨站请求的,譬如图片加载
2.很多时候为了方便,我们会将一些删除操作使用get请求,譬如后台数据列表,删除某条数据,直接用a
标签,然后加上删除的url,然后将要删除的id写到url请求里面,直接get请求,写起来很方便,譬如:http://wwww.xxx.com/custom/article/delete?id=33
,然后使用get请求,这个只有登陆用户才能访问,因此会认为是安全,
但是这会留下csrf漏洞,
如果你登陆了后台账户,别人给你发了封邮件,里面有一个假的图片,为:
<img src="http://wwww.xxx.com/custom/article/delete?id=33">
,那么打开邮箱的时候,你的后台的这一条数据就会被删除,因为浏览器里面有cookie,因此有执行权限。
3.因此涉及到数据库改动的要用post请求
4.对于get请求,仅仅是查询,不会涉及到数据库操作,因此被加载了也不会存在更新操作
5.get请求,就像上面img src加载的方式,浏览器为了安全,js默认是不能读取内容的,虽然浏览器加载了get的内容。
6.当然,post请求也可以被攻击,在form表单里面,需要加上csrf参数,譬如:
<input class="thiscsrf" type="hidden" value="-pJu7CfqMcpScHBs6vTyAyyylKUEOG_25ufQZi89oUKU1xaaXahY8jovHB2Zlb5lTtPd0kgPIamgrKo1bUnAHQ==" name="_csrf">
然后在服务端做csrf验证,就可以防范csrf了。