点击劫持防护
点击劫持
首先使用iframe加载外部需要劫持的网页,然后通过在外部网页的某些部分上增加一个透明的iframe来劫持某些按钮。当用户点击这个透明iframe区域的时候,跳转到自己的流程控制上。
点击劫持解决方法
微软提出来使用X-FRAME-OPTIONS 来判定加载iframe的方式:
X-FRAME-OPTIONS的三种配置:
DENY // 拒绝任何域加载
SAMEORIGIN // 允许同源域下加载
ALLOW-FROM // 可以定义允许frame加载的页面地址
django在新建项目的时候默认开启了点击劫持防护
查看settings.py的MIDDLEWARE_CLASSED中已经加载了django.middleware.clickjacking.XFrameOptionsMiddleware
默认情况下 X-FRAME-OPTIONS被设置成为了 SAMEORIGIN
如果需要修改这个值,主需要在setting.py中添加X-FRAME-OPTIONS=ALLOW-FROM这样的就可以了。
一般的解决方式也不是把默认的允许所有打开,为了方便有些推广网站之类的需要加载我们的网站,可能需要开启某些页面允许iframe,把某些关键的信息相关的页面进行保护起来即可,所以我们可以采用下面的一般处理方式
单独添加例外方式
通过增加装饰器的方法来实现,可以使用单独的装饰器来表述相关的
from django.views.decorators.clickjacking import xframe_options_exempt
from django.views.decorators.clickjacking import xframe_options_deny
from django.views.decorators.clickjacking import xframe_options_sameorigin
@xframe_options_exempt
@xframe_options_sameorigin
@xframe_options_deny
在进行代码审计时,对于没有例外要求的站点,只需要查看settings.py文件中是否开启了'django.middleware.clickjacking.XFrameOptionsMiddleware',并查找确保没有使用@xframe_options_exempt即可。
对于有例外要求的站点,需要合理筛选出例外的url,并找到对应的视图函数,查看其是否根据要求禁用或启用X-FRAME-OPTIONS