首页 > 编程知识 正文

为什么不用tornado,ssrf利用方式

时间:2023-05-06 13:29:15 阅读:23156 作者:67

Torando源代码分析实现XSRF保护Torando源代码分析实现XSRF保护Tornado开放XSRF保护的方法源代码分析xsrf_form_html ) )什么是self.xsrf_token

Tornado如何打开XSRF防护

3358 tornado-zh.readthedocs.io/zh/latest/guide/security.html

核心代码如下

Tornado打开xsrf_cookies

settings={ ' cookie _ secret ' : ' _ _ todo 3360 _ generate _ your _ own _ random _ value _ here _ ',' lore

formaction='/new _ message ' method=' post ' { % modulexsrf _ form _ html ()…/form源代码分析在上述代码中显而易见

xsrf_form_html ()是什么? 找到tornado目录,然后在该目录下通过linux命令找到xsrf_form_html

grep xsrf_form_html -r *查看grep结果,找到相关代码如下

defxsrf_form_html(self ) :返回类型=' hidden ' name=' _ xsrf ' value=' ' (escape.XHTML _ ESC allue )

self.xsrf_token用什么同样的方法找到xsrf_token

@propertydefxsrf_token(self ) :ifnothasattr ) self,' _xsrf_token ' ) : version,token, timestamp=self._ get _ raw _ xsrf _ token (output _ version=self.settings.get ) xsrf_cookie_version 2) csion { } if output _ version==1: self._ xsrf _ token=bin ascii.b2a _ hex (token ) elif output _ version===2333653650 ' binascii.B2A_hex ) _websocket_mask ) mask,token ) )、UTF8(str(int ) timestamp ) ] ) else 3360 raisevalueroror output _ version (ifversionisnone : expires _ days=30 if self.current _ userelsenoneself.set _ cookie (_ xsrf ' erenes ) **cookie_kwargs ) return self._xsrf_token其中@property是将这个类的函数设置为属性进行访问的装饰器

一定没有值_xsrf_token,就像首次访问一样

从代码中可以看出,token其实是self.xsrf_token的密钥

def_get_raw_xsrf_token(self ) :ifnotHasattr ) self,' _raw_xsrf_token ' ) : cookie=self.get tttr token,timestamp=None,None,noneiftokenisnone 3360 version=nonetoken=OS.urandom (16 ) timestamp=time.time ) )

如果是第一次生成token,则为

token=os.urandom(n(16 ) OS.urandom ) n )是随机生成n个字节的函数

所以,token是一个随机的16字节字符串

如果不是第一次的话。 从cookie获取token并将其放回前端

def_decode_xsrf_token(self,cookie ) : try : m=_ signed _ value _ version _ re.match (utf8 (cokie timestamp=cookie.split('|' ) mask=binascii.a2b_hex(UTF8 ) mask ) ) token=_websocket_ ) web bin ascii.a22 东京, timestamp else 3360 raise exception (unknownxsrfcookieversion ) ) else : version=1try : token=bin ascii.a2b _ hex ) ) ii.error,TypeError ) :Token=utf8(cookie ) timestamp=int(time.time ) ) return ) Version, token timestamp (except exception : gen _ log.debug (' uncaughtexceptionin _ decode _ xsrf _ token ',exc _ info=ttibon

当然,这里的“encode”和“decode”实际上只是在某种规则返回的token两侧添加了版本号和当前时间戳。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。