django iframe 点击劫持防护

2016/5/31 posted in  python

点击劫持防护

点击劫持

首先使用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