第1集:锦绣华南 http://t.cn/zWZF3Er第2集:云翔天边 http://t.cn/zWZF13x第3集:神奇高原 http://t.cn/zWZFB3A第4集:风雪塞外 http://t.cn/zWZFrmJ第5集:沃土中原 http://t.cn/zWZFdYW第6集:潮涌海岸[去旅行]
from:http://blog.prosight.me/blogs/984/名称解释0、单一职责原则(SRP)就一个类而言,应该仅有一个引起它变化的原因。一、”开放-封闭”原则(OCP)在软件设计模式中,这种不能修改,但可以扩展的思想也是最重要的一种设计原则。即软件实体(类、模板、函数等等)应该可以扩展,但是不可修改。【通俗】:设计的时候,时刻考虑,尽量让这个类是足够好,写好了就不要去修改了,如果新需求来,我们增加一些类就完事了,原来的代码能不动则不动。二、里氏代换原则(LSP)1.一个软件实体如果使用的是一个父类的话,那么一定适用于该子类,而且他觉察不出父类对象和子类对象的区别。也就是说,在软件里面,把父类都替换成它的子类,程序的行为没有变化。【一句话】:**子类型必须能够替换掉他们的父类型。**三、依赖倒置原则(DIP)1.高层模块不应该依赖于底层模块。两个都应该依赖抽象。2.抽象不应该依赖于细节,细节依赖于抽象(【白话】:针对接口编程,不要针对实现编程。四、接口隔离原则(ISP)1.使用多个专门的接口比使用单一的总接口总要好。换而言之,从一个客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小接口上的。2.过于臃肿的接口是对接口的污染。不应该强迫客户依赖于它们不用的方法。五、合成/聚合复用原则(CARP)尽量使用合成/聚合,尽量不要使用类继承。【聚合】:表示一种弱的拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。【合成】:一种强的拥有关系,提现了严格的部分和整体的关系,部分和整体的生存周期一致。六、迪米特法则(LoD)最少知识原则强调类之间的松耦合。即:如果两个类不必彼此直接通信,那么着两个类就不应当发送直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
很多程序员都会习惯性的在Textarea中按Tab键进行缩进,结果是——焦点移动到下一个控件去了。tabIndent.js就是一个专门用来解决这个问题的小巧脚本,只需要在页面中引用它,并调用tabIndent.renderAll();即可处理class为tabindent的Textarea。[repo owner=”julianlam” name=”tabIndent.js”]
作者是阿里巴巴安全工程师@卷成团变成个球的CasperKid君 。文章是CK在2011年编写的,在当下仍具有非常重要参考价值。很多web 站点存在上传验证方式不严格的安全缺陷,是web 渗透中关键的突破口 ,站长小伙伴要注意哦!0x00 上传检测流程概述0x01 客户端检测绕过(javascript 检测)0x02 服务端检测绕过(MIME 类型检测)0x03 服务端检测绕过(目录路径检测)0x04 服务端检测绕过(文件扩展名检测)黑名单检测白名单检测.htaccess 文件攻击0x05 服务端检测绕过(文件内容检测)文件幻数检测文件相关信息检测文件加载检测0x06 解析攻击网络渗透的本质直接解析本地文件包含解析.htaccess 解析web 应用程序解析漏洞及其原理0x07 上传攻击框架轻量级检测绕过攻击路径/扩展名检测绕过攻击文件内容性检测绕过攻击上传攻击框架结语下载: Upload_Attack_Framework.pdf
from: http://www.plhwin.com/2014/06/13/web-security-sql/Web安全简史在Web1.0时代,人们更多是关注服务器端动态脚本语言的安全问题,比如将一个可执行脚本(俗称Webshell)通过脚本语言的漏洞上传到服务器上,从而获得服务器权限。在Web发展初期,随着动态脚本语言的发展和普及,以及早期工程师对安全问题认知不足导致很多”安全血案”的发生,至今仍然遗留下许多历史问题,比如PHP语言至今仍然无法从语言本身杜绝「文件包含漏洞」(参见这里),只能依靠工程师良好的代码规范和安全意识。伴随着Web2.0、社交网络、微博等一系列新型互联网产品的兴起,基于Web环境的互联网应用越来越广泛,Web攻击的手段也越来越多样,Web安全史上的一个重要里程碑是大约1999年发现的SQL注入攻击,之后的XSS,CSRF等攻击手段愈发强大,Web攻击的思路也从服务端转向了客户端,转向了浏览器和用户。在安全领域,一般用帽子的颜色来比喻黑客的善与恶,白帽子是指那些工作在反黑客领域的技术专家,这个群体是”善”的的象征;而黑帽子则是指那些利用黑客技术造成破坏甚至谋取私利造成犯罪的群体,他们是”恶”的代表。“白帽子”和”黑帽子”是两个完全对立的群体。对于黑帽子而言,他们只要找到系统的一个切入点就可以达到入侵破坏的目的,而白帽子必须将自己系统所有可能被突破的地方都设防,以保证系统的安全运行。这看起来好像是不公平的,但是安全世界里的规则就是这样,可能我们的网站1000处都布防的很好,考虑的很周到,但是只要有一个地方疏忽了,攻击者就会利用这个点进行突破,让我们另外的1000处努力白费。常见攻击方式一般说来,在Web安全领域,常见的攻击方式大概有以下几种:1、SQL注入攻击2、跨站脚本攻击 - XSS3、跨站伪造请求攻击 - CSRF4、文件上传漏洞攻击5、分布式拒绝服务攻击 - DDOS说个题外话,本来这篇文章一开始的标题叫做 「Web安全之常见攻击方法与防范」,我原本想把上面的这5种方法都全部写在一篇文章里,可是刚写完第一个SQL注入攻击的时候,就发现文章篇幅已经不短了,又很难再进行大幅度的精简,所以索性把Web安全分成一个系列,分多篇文章来呈现给大家,下面你看到的就是第一篇「Web安全之SQL注入攻击的技巧与防范」。SQL注入常见攻击技巧SQL注入攻击是Web安全史上的一个重要里程碑,它从1999年首次进入人们的视线,至今已经有十几年的历史了,虽然我们现在已经有了很全面的防范对策,但是它的威力仍然不容小觑,SQL注入攻击至今仍然是Web安全领域中的一个重要组成部分。以PHP+MySQL为例,让我们以一个Web网站中最基本的用户系统来做实例演示,看看SQL注入究竟是怎么发生的。1、创建一个名为demo的数据库:CREATE DATABASE `demo` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;2、创建一个名为user的数据表,并插入1条演示数据:CREATE TABLE `demo`.`user` (`uid` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '用户uid',`username` VARCHAR( 20 ) NOT NULL COMMENT '用户名',`password` VARCHAR( 32 ) NOT NULL COMMENT '用户密码') ENGINE = INNODB;INSERT INTO `demo`.`user` (`uid`, `username`, `password`) VALUES ('1', 'plhwin', MD5('123456'));实例一通过传入username参数,在页面打印出这个会员的详细信息,编写 userinfo.php 程序代码:<?phpheader('Content-type:text/html; charset=UTF-8');$username = isset($_GET['username']) ? $_GET['username'] : '';$userinfo = array();if($username){ //使用mysqli驱动连接demo数据库 $mysqli = new mysqli("localhost", "root", "root", 'demo'); $sql = "SELECT uid,username FROM user WHERE username='{$username}'"; //mysqli multi_query 支持执行多条MySQL语句 $query = $mysqli->multi_query($sql); if($query){ do { $result = $mysqli->store_result(); while($row = $result->fetch_assoc()){ $userinfo[] = $row; } if(!$mysqli->more_results()){ break; } } while ($mysqli->next_result()); }}echo '<pre>',print_r($userinfo, 1),'</pre>';上面这个程序要实现的功能是根据浏览器传入的用户名参数,在页面上打印出这个用户的详细信息,程序写的这么复杂是因为我采用了mysqli的驱动,以便能使用到 `multi_query` 方法来支持同时执行多条SQL语句,这样能更好的说明SQL注入攻击的危害性。假设我们可以通过 http://localhost/test/userinfo.php?username=plhwin 这个URL来访问到具体某个会员的详情,正常情况下,如果浏览器里传入的username是合法的,那么SQL语句会执行:SELECT uid,username FROM user WHERE username='plhwin'但是,如果用户在浏览器里把传入的username参数变为 `plhwin';SHOW TABLES-- hack`,也就是当URL变为 `http://localhost/test/userinfo.php?username=plhwin';SHOW TABLES-- hack` 的时候,此时我们程序实际执行的SQL语句变成了:SELECT uid,username FROM user WHERE username='plhwin';SHOW TABLES-- hack'_注意:在MySQL中,最后连续的两个减号表示忽略此SQL减号后面的语句,我本机的MySQL版本号为5.6.12,目前几乎所有SQL注入实例都是直接采用两个减号结尾,但是实际测试,这个版本号的MySQL要求两个减号后面必须要有空格才能正常注入,而浏览器是会自动删除掉URL尾部空格的,所以我们的注入会在两个减号后面统一添加任意一个字符或单词,本篇文章的SQL注入实例统一以 `-- hack` 结尾。_经过上面的SQL注入后,原本想要执行查询会员详情的SQL语句,此时还额外执行了 SHOW TABLES; 语句,这显然不是开发者的本意,此时可以在浏览器里看到页面的输出:Array( [0] => Array ( [uid] => 1 [username] => plhwin )[1] => Array ( [Tables_in_demo] => user ))你能清晰的看到,除了会员的信息,数据库表的名字`user`也被打印在了页面上,如果作恶的黑客此时将参数换成 `plhwin';DROP TABLE user-- hack`,那将产生灾难性的严重结果,当你在浏览器中执行`http://localhost/test/userinfo.php?username=plhwin';DROP TABLE user-- hack` 这个URL后,你会发现整个 `user` 数据表都消失不见了。通过上面的例子,大家已经认识到SQL注入攻击的危害性,但是仍然会有人心存疑问,MySQL默认驱动的mysql_query方法现在已经不支持多条语句同时执行了,大部分开发者怎么可能像上面的演示程序那样又麻烦又不安全。是的,在PHP程序中,MySQL是不允许在一个mysql_query中使用分号执行多SQL语句的,这使得很多开发者都认为MySQL本身就不允许多语句执行了,但实际上MySQL早在4.1版本就允许多语句执行,通过PHP的源代码,我们发现其实只是PHP语言自身限制了这种用法,具体情况大家可以看看这篇文章「PHP+MySQL多语句执行」。实例二如果系统不允许同时执行多条SQL语句,那么SQL注入攻击是不是就不再这么可怕呢?答案是否定的,我们仍然以上面的user数据表,用Web网站中常用的会员登录系统来做另外一个场景实例,编写程序login.php,代码如下:<?phpif($_POST){…
5.1是个好日子,一下子就三同学结婚,一个是大学同学陈磊,另外个是高中的同桌吕红娟,还有个子鹏。陈磊啊,好玩的一男娃子,那一笑,怎么那么賊啊!祝福你们哈!┏(^0^)┛同桌啊!叫吕红娟,习惯叫同桌了,陕北其实挺不错的,虽然一年就刮两次风,留在那行了!同样祝福你啊!┗(^0^)┓ 还有一个子鹏,这货的昵称不好听,还是叫名字吧!不习惯叫名字啊!很自恋自己的鹰钩鼻,婚纱照很漂亮哈!继续祝福你们!^V^
近期许多网民发现在使用360浏览器访问网站时会出现链接跳转失灵或者刚刚填写好的表单却被清空的现象。技术监测显示这是因为360浏览器在升级后随机篡改HTTP Referer,干扰用户浏览网站的访问序列,导致网站为用户提供的服务中断,带来不便。什么是HTTP Referer?简而言之,HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些公开信息用于响应访问需求。Referer被篡改固然导致不便,但更需要大家警惕的是360此举即意味着将所有网银用户暴露在CSRF攻击(Cross-site request forgery跨站请求伪造)面前。举个例子。当你在360buy完成购物按下付款按钮,你需要登录到网银,通过对银行网站发送一个请求来完成转账。这时候,如果有黑客瞄上了你,使用CSRF的攻击方式,而你又恰巧刚进行过转账操作不久,浏览器与银行网站之间的会话还没有过期,那悲剧就很可能会发生,黑客将轻松的把你账户里的钱据为己有。当前防御CSRF攻击最方便的方法就是验证Referer值。让我们回到上面说的那个例子来:银行对转账请求验证Referer值,当发现Referer值不是来自银行自己的网站时,将会拒绝转账的请求,以保证账户的安全。说到这里,聪明的你是不是隐约觉得有些不对头了?是的。如果Referer值被伪装成银行网站的话,那转账请求就会被通过,你账户里的钱就会变成黑客的囊中之物。因为Referer值是由浏览器提供的,使用验证 Referer 值的方法防御CSRF攻击,其实就是把安全性都依赖于浏览器来保障。当你使用的浏览器,Referer值能被随意更改,你对自己钱包的归属还那么有信心吗?与HTTP Referer一同被360搞得“不明不白”的还有User-Agent。所谓User-Agent,简单的说就是客户端浏览器等应用程序使用的一种特殊的网络协议,在每次浏览器进行HTTP请求时发送到服务器,服务器就知道了用户是使用什么浏览器来访问。若想知道当前浏览器的User Agent信息,大家可以在地址栏直接输入 javascript:alert(navigator.userAgent); 回车即可看到。目前360浏览器会频繁更改自身的User Agent,伪装成苹果safari或微软IE。此举不仅导致网站不能正确识别用户,而且还使得许多网站的页面因为对浏览器识别错误而呈现错乱。正常显示的360浏览器UA信息有“360SE”字样不定期伪装成IE9或者Safari的360浏览器360在用户正常使用浏览器时将这些参数不经许可就更来改去,甚至移花接木,包藏什么祸心我们不得而知。但数字公司视用户为禁脔的行径无疑正愈演愈烈,不仅是记录访问数据窥私窃密,而且意图“绑架”用户为肉鸡。为了自己的安全,我们是时候做出选择了!刚才忘记添加原文网址了原文网址:http://bbs.shendu.com/thread-2218175-1-1.html
程序猿们都是些机械手,让制造东西很容易,如果需要把东西艺术一下,很太难为程序猿们了!Twitter Bootstrap在很大的程度上面解放了程序猿对页面的制作,前提就是web使用Twitter Bootstrap来制作的。Twitter Bootstrap很推荐每个程序员都来掌握一下,其中难度也没多少,如果说有难度,也就是一点点的E文吧!不过现在这点难度也解决了,已经有朋友将Twitter Bootstrap翻译成中文了,感谢这位朋友啊!Bootstrap 是基于 HTML,CSS,JavaScript 的简洁灵活的流行前端框架及交互组件集,由微博的先驱 Twitter 在2011年8月开源的整套前端解决解决方案。Bootstrap 有非常完备和详尽的使用帮助文档,热心的 @TV来客开发者 翻译成了中文,讨厌英文的朋友有福了。 Bootstrap 的口号是 Designed for everyone, everywhere.(适用于任何场景,适用于每一个人),主要有以下特色:适应各种技术水平 Bootstrap适应不同技术水平的从业者,无论是设计师还是程序员,大牛还是菜鸟。既能用来开发简单的小东西,也能构造复杂的应用。跨设备,跨浏览器 最初设想中的Bootstrap只支持现代浏览器,不过新版本已经能支持所有主流浏览器(甚至包括IE7)。从Bootstrap 2开始,提供对平板和智能手机的支持。12列栅格布局 栅格系统不是万能的,不过在应用的核心层有一个稳定和灵活的栅格系统确实可以让开发变得更简单。可以选用内置的栅格或是自己手写。响应式设计 从Bootstrap 2开始,提供完整的响应式特性。所有的组件都能根据分辨率和设备灵活缩放,从而提供一致性的用户体验。样式化的文档 与其他前端工具箱不同,Bootstrap优先设计了一个样式化的使用指南,不仅用来介绍特性,更用以展示最佳实践,应用以及代码实例。不断完善的库 尽管只有10kb(gzip压缩后),Bootstrap却仍是最完备的前端工具箱之一,提供了几十个全功能的随时可用的组件。定制的jQuery插件 一个出色的组件设计岂能没有易用易扩展的人机界面?Bootstrap为此提供了定制的jQuery内置插件。用LESS构建 当传统的枯燥CSS写法止步不前时,LESS横空出世了。LESS中使用变量,嵌套,操作,混合编码,让CSS编写更快更灵活。 Twitter Bootstrap 中文帮助文档:http://wrongwaycn.github.com/bootstrap/docs/index.html原文网址:http://www.cnblogs.com/lhb25/archive/2012/07/26/bootstrap-documentation.html