作者是阿里巴巴安全工程师@卷成团变成个球的CasperKid君 。文章是CK在2011年编写的,在当下仍具有非常重要参考价值。很多web 站点存在上传验证方式不严格的安全缺陷,是web 渗透中关键的突破口 ,站长小伙伴要注意哦!0x00 上传检测流程概述0x01 客户端检测绕过(javascript 检测)0x02 服务端检测绕过(MIME 类型检测)0x03 服务端检测绕过(目录路径检测)0x04 服务端检测绕过(文件扩展名检测)黑名单检测白名单检测.htaccess 文件攻击0x05 服务端检测绕过(文件内容检测)文件幻数检测文件相关信息检测文件加载检测0x06 解析攻击网络渗透的本质直接解析本地文件包含解析.htaccess 解析web 应用程序解析漏洞及其原理0x07 上传攻击框架轻量级检测绕过攻击路径/扩展名检测绕过攻击文件内容性检测绕过攻击上传攻击框架结语下载: Upload_Attack_Framework.pdf
Anytodo 是一款chrome浏览器的插件,可以与google task进行同步,进行任务管理。我的手机是安装的gtasks的免费版本,是足够使用的了,Anytodo的使用,也弥补了google task没有桌面的管理的空缺,推荐使用。Anytodo是一个基于html5的离线便签应用,可方便的与Google Tasks进行同步,主要功能包括:1. 双击空白处快速添加便签;2. 双击便签简单编辑内容;3. 点击编辑按钮,支持富文本编辑;4. 更换便签颜色;5. 拖动改变位置和大小;6. 更换主题;7. 离线访问;8. 后台同步;9. 定时提醒;Anytodo目前最新版本为1.1.1,更新内容如下:1. 添加了处理时间的同步;2. 修正了富文本编辑后,提醒和日期显示错误;3. 修复了同步中的一些问题,提高了同步效率;项目地址:http://code.google.com/p/any-todo/下载插件:Anytodo-1.1.1.crx 1.5 MB2012-03-26 17:39 更新Anytodo 1.1.2,可以从Chrome App Store现在安装了:安装地址:https://chrome.google.com/webstore/detail/maidakogkfgehlikodkefhfefnmfaiig
总结起来还是要有规范,规范到习惯。 代码易于维护,分为两个方面:容易阅读理解;容易修改扩展。一、如何写出容易被阅读和理解的代码1. 最根本的一条,要向写文章学习,有目录,有大纲,有标题,有段落,有适当的提示。1.1. 首先是目录结构,这个在一些比较好的实践中,有约定俗成,比如Rails应用,app目录下一定分controllers、models、views、helpers四个目录。再加上config、lib、vender,大致的代码在哪个位置,不用猜都知道。越是常见的项目类型,越是应该按照约定俗成来构建项目的目录结构,不要别出新裁。对于没有业内参考的项目,目录结构也尽可能采用简单、易懂、含义固定明确的单词,比如:core、config、test这样的命名。1.2. 包名与文件名,在这方面,java语言的规范非常值得其他语言参考和借鉴,分层组织,合理命名。是最重要的。1.3.一个源代码文件里,要不要有注释?我认为,尽可能不要,还是要像写文章一样,让人阅读起来,有感觉。比如:文件名,类名,方法/函数名。如果将所有的实际代码全部折叠起来,顺序的阅读这些名字,能不能让阅读者,对于这一个源文件的内容和目的,有大概的了解?再强调一次顺序阅读,一个 源程序文件内有很多个函数/方法,这些方法的排列次序,是有意义的。仅仅依靠调整次序,比如:构造函数,扩展构造函数,简单的读写函数,业务相关的函数。以这样的次序来排列,会更加便于阅读。在必须写注释的地方,也不要写得太多,言简意赅,把要点用1.2.3.讲清楚。1.4. 变量名,常数名,我们必须一再一再的强调命名的重要性,可以说,命名是软件开发中,头等重要的大事。要简洁、清晰、全英文(决定不要汉语拼音、任意缩写)、尽可能不要夹杂数字,比如var1、var2这样的变量名,就是最糟糕的。2. readme在项目开发的过程中,定期整理一份readme,放在项目的根目录,主要包含两部分内容:我们的代码做了些什么?如何查找我们写的代码。3. wiki团队开发,尽可能维护一份wiki,自己架一个mediawiki或者其他wiki,都是很简单的。或者自己架一个redmine这样的集成项目管理工具,该有的就都有了。wiki的管理维护是一个很大的话题,这里就不再展开了。4. 单元测试@李楠 和@KevinWei 已经提到了。 这个办法,既方便阅读理解代码,也方便修改代码。非常重要。5. Code Review@KevinWei 也已经提到了。二、如何写出容易被改写和扩展的代码1. 单元测试,最好全过程采用TDD(测试驱动开发)这样才能让人有信心修改你的代码。2. 参考业内成熟实践与设计模式这个事情,要多讲一句,千万不能过头。为了追求可扩展性,可重用性,甚至仅仅是为了玩弄设计模式,会让一个项目成为过度设计的牺牲品,千万不能过头。3. 定期重构一上来就向设计模式靠拢是很危险的,重构时以设计模式为参考会好一些。但是,大多时候,我们没时间重构。。。所以,还是TDD最实在,按照TDD的工作模式,你的项目几乎每天都有大大小小的重构。4. 结对编程这个@李楠 已经提到了。让知识在团队中不只是一个人掌握,很重要。大概就是这些吧。。。来源:http://www.zhuangbiaowei.com/blog/?p=449
myeclipse7以前都是可以很容易通过link方式来安装eclipse的插件的,自从myeclipse7以后,myeclipse修改的安装配置的方式,直接用link方式安装插件很麻烦,这里找到一个用link方式的插件配置代码的生成器,用这个安装,简单的一米,推荐必备软件。步骤如下1.比如给myeclipse10安装hibernate的插件,我的hibernate插件之前是eclipse3.2的版本安装的里面。在D:toolsMyEclipse 10MyEclipse 10建立myplugins文件,将hibernate插件放入文件中,不要有eclipse的目录。hibernate插件目录如下 D:toolsMyEclipse 10MyEclipse 10mypluginshibernatepluginscom.hudson.hibernatesynchronizer_3.1.9_lclgv1.02.使用MyEclipse插件配置代码生成器,修改里面的路径import java.io.File;import java.util.ArrayList;import java.util.List;/** * *@ClassName : PluginConfigCreator@ClassDescription : MyEclipse插件配置代码生成器@Author : dapeng@CreateTime : 2011-12-18 下午8:39:31 */public class PluginConfigCreator {public PluginConfigCreator() {}public void print(String path) { List<String> list = getFileList(path); if (list == null) { return; } int length = list.size(); for (int i = 0; i < length; i++) { String result = ""; String thePath = getFormatPath(getString(list.get(i))); File file = new File(thePath); if (file.isDirectory()) { String fileName = file.getName(); if (fileName.indexOf("_") < 0) { print(thePath); continue; } String[] filenames = fileName.split("_"); String filename1 = filenames[0]; String filename2 = filenames[1]; result = filename1 + "," + filename2 + ",file:/" + path + "/" + fileName + "\,4,false"; System.out.println(result); } else if (file.isFile()) { String fileName = file.getName(); if (fileName.indexOf("_") < 0) { continue; } int last = fileName.lastIndexOf("_");// 最后一个下划线的位 置 String filename1 = fileName.substring(0, last); String filename2 = fileName.substring(last + 1, fileName.length() - 4); result…
中秋行动 中秋本来打算去外地钓鱼,一切的计划都泡汤了。在南京房子里面待着,就玩起来我的后院来了!Typecho自从10年有个0.8的版本后,就没有动静了,Typecho的功能的确是很简单,比起Wordpress的各式各样的资源都很少了。所以就狠了下心,把Typecho转成了Wordpress。 憋了一天一夜,把Typecho转成了Wordpress,选了一款看起来比较大气一点的主题,Logo也简单改了一下,Logo看起来也是蛮大气的,用的中文书法字体,大红颜色,是我做这些设计的时候,最喜欢的一种颜色了。 做完了主题,还做了一个个人页面,做个人介绍使用的,目前也只做了模板,里面的资料慢慢填充了。 中秋佳节,用古语说,每逢佳节倍思亲啊!
闲谈一下 本来是打算睡了,最近一段时间,都是12点以后睡觉的,和一哥们聊天,勾起了我想乱侃一下的虫子,不说不痛快啊! 和哥们谈到了权利和感情,是权利的诱惑,还是感情的不舍。权利这玩意,是个诱人的东西,是谁都追求,我也追求,追求也需要看看这个权利的价值了,追求那些无用的东西,就是在浪费生命,真不如去做些自己能做到的事情。 派系的竞争啥地方都有,”与人斗,其乐无穷“是我听到很经典的一句,能玩你们玩,能斗你们斗。虽然自己一直安慰自己,自己是不想玩,也不原斗,可也明白,曾经自己也是牺牲品。再次面对这样的局面,态度依旧,不想趟这趟浑水,做好事情,心安理得。愿意一起做事情,就把事情做好,其他啥的别去沾惹,省的结果对谁都不好。这个道理,对想做事情的人,哪里都一样。 自己的经历没什么跌宕起伏,也没什么大风大浪,平平淡淡的事情也经历了一些,承认自己的悟性比较差,不够灵活,属于笨人的一类。自己也迷茫的,浑浑噩噩的也过过一段时间,现在也能明白一些,没有什么条件不能答应的,也没有什么结果不能接受的。 看过的朋友,认识也别硬套,不认识也别挑毛病,这个是自己乱侃而已,不对针对任何人,随意而说而已!
这两天把收藏了好久的文章,还有收藏夹中的链接做了整理。现在我的做法是文章的收藏一般都会放到麦库里面,我麦库的公开地址是http://note.sdo.com/u/dapeng 现在公开地址的访问还有些问题,访问子栏目需要输入密码,可我没有设置密码,麦库的客服说只能到下一周解决了,等待解决吧!另外是对一些链接的管理办法是,建立收藏网站,使用新浪的SEA提供的typecho搭建了收藏的网站http://zptools.sinaapp.com 收藏网站是模仿阅微草堂的想法建的,部分的链接也是来源那里的。使用新浪的SEA来搭建是为了服务器的稳定,毕竟我自己的用的服务器在国外,说不定哪天给和谐了,不放心啊!在做网站收藏整理的时候,发现国内优秀的JAVA网站没多少,网站的收藏还需要继续的更新整理,才能符合自己的需要。方向是java相关、企业服务SOA、数据库、linux、前端设计、项目管理、互联网等等吧! 选择了一款比较简单的主题,对主题也做了修改,主要是增加css3的使用,使用了css3的圆角、还有阴影。在chrome、ie9、opera、firefox5测试都通过了,很可惜firefox3没有通过,当然ie6是不会通过了。还增加使用了一个jquery的插件scrolltotop,当页面向下滚动的时候,就会出现返回上面标记。修改好了,也就把博客主题也替换一样了,统一风格吧!现在瞧瞧两个站点吧!http://zptools.sinaapp.com http://dapeng.me
人人网的开源框架paoding-rose(2) 上次写过rose,说到文档不全,其实不是文档不全,而是我没有细细看,文档还是写的很详细的,而且源码注释很规范,加上源码注释和文档,rose框架还是很容易的掌握的。 在安全性设计上面打算采用spring security来实现的,把spring security集成到系统用了几天的时间,这样系统就是spring + spring security + rose的设计了。 其中的遇到的问题是spring security 需要配置自己的过滤器,而在rose的系统中只需要配置一个过滤器,配置两个过滤器就出抛出已经有过滤器的异常,我把spring security的过滤器去掉了,只配置了一个rose的过滤器,再按照配置spring security的方式配置好了。在配置过程中,就是一个不断尝试,试着配出来的。 配置好了,就是项目启动不再出现异常情况,运行也不报错了。可预期的结果并不是我要的结果。我过滤的方式是通过url来控制权限的,spring security对正常的url是可以进行控制的,对pathinfo格式的url就不能做控制。这个问题纠结了好久,我还询问过开发rose框架的作者,他给我的解释是rose本身就是一个独立的context,它的parent是root context,这样说来,rose就和spring security是属于两个context了,当然不能控制了。 根据日志记录,这样的解释说不过去,从日志记录中,spring security对url都是做过滤的,首先是rose对url进行过滤,接着是spring security进行过滤。在看rose源码的时候,有这样的一段注释。“如果一个请求在Rose中没有找到合适的类来为他服务,Rose将把该请求移交给web容器的其他组件来处理。” 这样才能解释通道理,也可以和日志记录对应起来。rose先做了处理,无法处理的时候才交给其他容器做处理的。 我想尝试先让spring security先来处理,这样处理之后,spring security却不会请求交给rose来处理,这块尝试了好久,没有找到解决的办法,最终只跟踪到spring security中的一个异常对象,在rose处理了,就不会把异常抛出,这个也是spring security不能处理rose请求的原因的。结果是我解决不了,引入spring security就放弃了。 引入spring security我是想偷工的,没有偷成。反过来也想想,引入了新框架进来,就会增加系统的负担,我还是希望系统轻巧一点。 可安全性总是要做的,了解spring security的原理,同理写一个了。spring security是按照面向切面的思路,通过过滤器来实现的。rose的过滤器很好用,不仅可以设置过滤器,还可以设置局部和全局的过滤器,还可以设置过滤器的权重,满足什么时候,什么场景,采用什么过滤器。 我写的基本可以用起来,满足了我的基本要求了。现在也仅仅是满足需求,对一些漏洞还需要继续的修补。