防站外提交(csrf)有什么好办法?

WBOY
풀어 주다: 2016-06-06 20:47:45
원래의
1098명이 탐색했습니다.

需要代码,如何防止站外提交数据

回复内容:

需要代码,如何防止站外提交数据

比较常见的方法是给每个需要提交数据的表单产生一个hashkey,提交的时候一起带上就行。

  1. 检查 referrer header
  2. 如果用户的id是用户以外的其他人看不到的,可以在请求里带上用户的id
  3. 请求里带上一个token,token可以是绑定用户,也可以是每次请求生成(*)
  4. 提交请求后,服务器确认后再执行请求对应的操作,例如弹出对话框要求用户确认
  5. 提醒用户在访问你的网站的时候不要访问其他站点
  6. 提醒用户及时登出
  7. 用户关闭页面后就登出用户
  8. 用户一定时间未操作就登出用户

* token每次生成比较头痛的就是并行兼容的问题,如何对付客户用多个标签页浏览同一网页时,各个标签页的行为一致,需要小心处理。我喜欢折中一下,token采取绑定用户+超时,但不绑定请求的方式。保持一定便利性的同时,简单降低token长期不变带来的回放攻击的风险。 @沙渺

Django 提供了 CSRF 的框架,默认 POST 请求都需要带上 token 才行。

给你参考一下:https://docs.djangoproject.com/en/dev/ref/contrib/csrf/

请求带上一个token,token可以考虑绑定用户,提交请求后,服务器确认后再执行请求

额,使用x-csrf-token这个HTTP header。。。

个人觉得站外提交根本就不能防止,这是我曾经问的一个问题http://segmentfault.com/q/1010000000353407,个人认为插入和服务器端的SESSION一样的本地HASH值也不行,毕竟Chrome一按F12就可本地修改代码了,最重要的还是服务器端进行验证客户端提供的参数

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!