STRUTS2类型转换错误导致OGNL表达式注入漏洞分析
继上次struts远程代码执行漏洞后,前段时间又发布了一个远程代码执行漏洞。影响范围极广,利用方式相对上次要苛刻一点,但是读完本文,批量抓鸡不难。
精选技术长文、实践记录与系统化阅读
低噪声、高可扫读;标题、摘要、来源、标签一目了然。
采集自各技术站点的近期文章。
继上次struts远程代码执行漏洞后,前段时间又发布了一个远程代码执行漏洞。影响范围极广,利用方式相对上次要苛刻一点,但是读完本文,批量抓鸡不难。
这是个没有人公布过的漏洞,偶尔看代码发现的。事实上,这段代码用的人不多,需要同时满足两个情况,才可以搞。我猜测,发出struts2远程代码执行的那个大牛,不可能没发现这么弱智的漏洞。所以,要么是有原因不能公布,要么就是卖了,那就好,这次我首发,哈哈哈!
状态同步,简单说就是一个玩家的 Agent 在做一个动作时,它需要把这个行为通知所有在虚拟场景中他附近的玩家。当很多人(超过 50 人)在一起时,就有大量的数据包需要广播出去。我们目前的做法是基于这样一个假设:服务器内部数据包的传递非常廉价。广播包比逐个发送更加廉价,这是因为,单机内部广播,可以避免大量的数据复制。所以,在同一张地图上,我们会简单的把任意一个 Agent 的状态改变信息广播给同张地图的所有其他人。这样就不需要动态维护分组信息。当每个 Agent 收到广播包后,再根据自身的逻辑进行过滤,再发给对应的客户端。
浮点数的存储格式与整数完全不同。大部分的实现采用的是IEEE 754标准,float类型,是1个sign bit,8 exponent bits,23 mantissa bits。而double类型,是1个sign bit,11 exponent bits,52 mantissa bits。至于浮点如何去表示小数,请自行搜索google。由于float使用的小数表示方法,导致浮点数值是有精度限制的。 有限的精度就引发了浮点数值使用时的两个陷阱。
在代码中还是要尽量避免有符号数和无符号数的比较。如果无法避免,为了清楚的表明自己的目的,最好使用强制类型转换。
android的浏览器,竟然不支持httponly,这真是跨站的天下啊!
这是一个随机函数破解的经典例子。在java程序中,获取随机数的做法有多种。但是我们实现一个随机token,并用于认证时,通常第一时间,想起来使用“System.currentTimeMillis”,本文会详细讲解一次破解随机数的经过。
这篇文章介绍的简单方案应用于如下需求:主库为了性能考虑,作分库分表,从库则上为了多索引查询等需求,不作分表。 参数replicate-rewrite-db 及应用 这个参数是官方版本自带的。配置格式为 replicate-rewrite-db = from_db -> to_db。 同步效果为将所有在from_db上的操作都修改为对to_db的操作。
InnoDB存储引擎在进行Drop Table操作时,会短暂hang住整个系统,而且这个hang的时间的长短与Buffer Pool的大小相关。主要原因在于InnoDB在drop table时,会连续两次遍历buf pool LRU 链表,遍历的过程加锁,因此导致系统hang住。那么MySQL数据库InnoDB存储引擎在drop table时为何需要遍历LRU链表呢?
buffer pool LRU list flush(innodb_buffer_pool_size) 每当一个新页面读取buf pool之后,MySQL数据库InnoDB存储引擎都会判断当前buf pool的free page是否足够,若不足,则尝试flush LRU链表。
摘要体验过百度语音产品的你一定能感受到语音交互的魅力。在这里,我们以一个常用命令(打开、关闭、开始、停止)的语音识别任务为例,介绍一下如何利用HTK快速地建立这样一个语音命令识别系统,让电脑识别出你所说的简单命令。当然,如果要想识别任何其它的词,原理及过程也完全相同。 工具包介绍 HTK的全称是”Hidden Markov Model Toolkit”,是英国剑桥大学工程学院开发的隐马尔可夫模型(后面简称为隐马模型)工具包,可以方便有效的建立及操作隐马模型。隐马模型在许多人工智能领域都有着成功的应用,比如语音识别,当前国际上主流的语音识别系统仍是基于隐马模型建立的。HTK的开发也主要是针对语音识别的应用及研究。
最近花了大约一星期的时间写了一个PHP扩展模块Opdumer,并封装成了Web服务(点击这里访问)。这个模块的主要内容是输出PHP代码对应的opcode。其实之前已经有一些用于查看opcode的扩展模块,如比较有名的vld。之所以重新实现一个这样的模块,主要是因为vld不支持PHP_FUNCTION API,也就是说vld只能用于CLI形式,而Opdumer同时拥有CLI API和PHP_FUNCTION API,另外,也想借助编写这个模块的机会学习Zend Engine中opcode的编译和执行机制。个人打算后面专门针对opcode的编译执行机制写一篇文章,而本文主要描述Opcode的使用方法及对应Web服务的使用。
最近哈希表碰撞攻击(Hashtable collisions as DOS attack)的话题不断被提起,各种语言纷纷中招。本文结合PHP内核源码,聊一聊这种攻击的原理及实现。 哈希表碰撞攻击的基本原理 哈希表是一种查找效率极高的数据结构,很多语言都在内部实现了哈希表。PHP中的哈希表是一种极为重要的数据结构,不但用于表示Array数据类型,还在Zend虚拟机内部用于存储上下文环境信息(执行上下文的变量及函数均使用哈希表结构存储)。 理想情况下哈希表插入和查找操作的时间复杂度均为O(1),任何一个数据项可以在一个与哈希表长度无关的时间内计算出一个哈希值(key),然后在常量时间内定位到一个桶(术语bucket,表示哈希表中的一个位置)。
简单来说O2O是将线下的商品(衣食住行)通过线上展示,消费者获得消费决策,然后决定消费最后消费的整个过程。至于是不是线上交易,线下消费,其实不重要。 纵观整个行业,各种O2O产品不断涌现。最开始的大众点评,口碑,然后是团购,后来提出O2O概念后,然后有人说到“网购只占人均消费的百分之几左右,还有90%多属于线下消费。”整个行业开始热起来,淘宝本地生活,QQ美食,丁丁,切客优惠,百度身边,爱出发,这里,等等,都属于O2O.其实还有个最重要的,就是旅游行业了,其实他是具备天然的O2O优势的。 从整个行业用户的需求来看,个人觉得分为2部分吧。1部分是对于自己熟悉的商家,1部分是对于自己不熟悉的商家。对于熟悉的商家,最主要的决策依据,就是优惠(这优惠包含打折,团购等)。对于不熟悉的商家,消费指南很重要,这里的消费指南是:我该选哪个,为什么选这个? 说说几个具有明显差异化的产品吧
很多做技术的人都希望能坚持做技术,而不是转管理。但在当前国内的环境下,能提供坚持做技术的氛围的公司却寥寥无几。技术做的好一些后,除了设计技术方案并推动实现以外,不可避免的要开始带团队,开始跟项目或推项目,开始盯需求讨论,开发进度,测试,bug修复等等。最终,我们做的是 Architect + Team Leader + Project Manager 的混合体,而不是我们原来期望的 Researcher 。在这里我们不讨论如何回到 Researcher 的道路上去,只讨论如何提升自己,做一个合格的 Architect + Team Leader + Project Manager 混合体 1. 保持对技术的关注和热情 不管到什么时候,在什么地方,技术是技术人的立身之本。即使这段时间里自己在忙的事情,跟技术一点关系都没有,但我们还是要时刻保持对技术的关注,广度和深度并进,在需要的时候才能给出
跨语言信息检索,是信息检索领域中的一个研究课题。近10几年来,由于互联网的飞速发展,这方面的研究受到了学术界的广泛重视。将这项技术应用于搜索,可以帮助我们查找到更多的有用信息,例如外语相关页面、多语言页面以及语言无关的资源(如图片)等等。这些信息可以大大丰富搜索的结果,满足用户多样的需求。在跨语言信息检索的研究中,有一些研究成果已经趋于成熟,达到可以应用的状态。事实上,Yahoo和Google在5,6年前就已经开始提供多语言的搜索服务。毫无疑问,在这方面他们已经走在了世界的前列。目前,百度的各项国际化业务正在如火如荼的开展,对跨语言技术来说,正是用武之地。相信不久的将来,它将会在搜索国际化进程中扮演举足轻重的角色。来,就让我们一探究竟吧。
如果Google一下“闭包”这个词,会发现网上关于闭包的文章已经不计其数,甚至很多人将闭包看做面试JavaScript程序员的必考题(虽然闭包和JavaScript没有什么必然联系)。既然如此,我为什么还要写一篇关于闭包的文章呢? 首先,虽然网上关于闭包的文章甚多,但是很少以较为形式化的角度阐述闭包,而我认为理解闭包的关键之一就是从形式化角度理解其涵义;其次,大多数文章将闭包的概念与JavaScript语言绑定太死,这样容易局限对闭包概念的理解,而难以窥探到其本质。从JavaScript去理解闭包,个人认为这是本末倒置的,应该先理解纯粹意义上的闭包,然后再理解JavaScript中的闭包机制。 基于以上情况,本文将从较为形式化的角度阐述闭包概念,当做对现有网络的资料的一个补充。
语音是人们沟通交流最直接、最自然的交互方式。自计算机问世以来,人们就一直希望可以通过语音实现人和计算机之间的交互,而语音识别技术,目标就是通过把人类的语音中的词汇内容转换为相应的文本,架起了人机交互的桥梁。对于一个语音识别系统,速度和精度是两个核心指标,直接决定着系统是否可用。其中,识别速度的提升意味着可以降低成本,同时提供更多的语音服务,一直是语音识别技术研究的重点方向。在语音识别系统中,声学模型得分的运算量一般会达到整个系统的40%-70%,因此也是识别速度优化的重点模块。本文就来讲讲如何优化声学模型得分计算。 基本概念介绍特征向量:语音数据在识别前首先会被分成多帧数据,一般帧长为25毫秒,帧移为10毫秒。每一帧语音数据经过特征提取之后,会生成一帧特征,称之为一个特征向量或特征矢量 ,其中n为特征向量的维数。
在实际项目或者自己编写小工具(比如新闻聚合,商品价格监控,比价)的过程中, 通常需要从第3方网站或者API接口获取数据, 在需要处理1个URL队列时, 为了提高性能, 可以采用cURL提供的curl_multi_*族函数实现简单的并发. 本文将探讨两种具体的实现方法, 并对不同的方法做简单的性能对比.
我们在开发android应用的时候,经常会遇到类似从网络加载大图,在加载的过程中,在图片要显示的ImageView位置,先显示一个转圈的loading动画图,给用户的体验会更好一些,要实现这个动画图很简单,使用在/res/anim中定义xml的方式,通常使用…. 来实现。 不过大多数朋友都会遇到的问题是,动画是做好了,但是界面在加载的时候,动画并不会自动播放,还得通过屏幕点击等事件来触发,这就失去了意义了,实际上,android的动画AnimationDrawable 组件里面有个start()方法用于启动动画播放,但是这个方法不能直接写在onClick,onStart,onResume里面,写进去也是无效的,无法启动动画,只能写在比如事件监听当中,于是我们可以使用点小技巧来实现自动播放