1. 钓鱼网站的页面和正经网站的页面对浏览器来说有什么区别? (页面是怎么来的?)
钓鱼网站的页面是由 钓鱼网站的服务端给你返回的
正经网站的网页是由 正经网站的服务端给你返回的
2。钓鱼网站进行csrf的过程:
用户访问了钓鱼网站,并通过钓鱼网站给正经网站的服务端发送了请求,(例如在转账请求,钓鱼网站修改了转入账户,然后发送给了正经网站的服务端)
正经网站的服务端未能识别出这个一个虚假的请求,而是直接进行了处理,从而转账成功
解决方案:在正经网站加入校验字符(该字符钓鱼网站获取不了),使得正经网站的服务端能够识别是否是正经网站传来的请求
正经网站的请求页面,端口号为8000:
正经网站的服务端:
钓鱼网站仿照了正经网站的页面,并给正经网站的服务端发送了请求且篡改了转入账户:
钓鱼网站的页面,端口号为8888:
当钓鱼网站给正经网站的服务端发出请求时,正经网站的服务端未能辨别出这是一个虚假的网站,从而对请求进行了处理
解决方案:在正经网站加入校验字符(该字符钓鱼网站获取不了),使得正经网站的服务端能够识别是否是正经网站传来的请求
Django中内置了一个专门处理csrf问题的中间件
django.middleware.csrf.CsrfViewMiddleware(在setting中)
这个中间件做的事情:
1. 在render返回页面的时候,在页面中塞了一个隐藏的input标签
用法:
我们在页面上 form表单 里面 写上 {% csrf_token %}
网页中翻译为<input type="hidden" name="csrfmiddlewaretoken" value="8gthvLKulM7pqulNl2q3u46v1oEbKG7BSwg6qsHBv4zf0zj0UcbQmpbAdijqyhfE">
2. 当你提交POST数据的时候,它帮你做校验,如果校验不通过就拒绝这次请求
settings配置中:
csrf在网页中则翻译为一串字符串
此时钓鱼网站在发出请求时,则被正经网站的服务端拒绝: