mai 2022

Uncategorized

centos下搭建npm镜像

写在前面 对前端开发来说,nodejs你可能并不陌生,也许你不会用它来写程序,但它有很强大的模块库可以帮你在开发过程中轻松的搞定一些重复无聊的工作,例如你可以使用Grunt以及它的插件自动完成代码校验,压缩,合并,生成文档和单元测试等。如果你知道这些,那么你会了解,在用npm安装模块的时候会到境外服务器上去下载这些模块,而在天朝这种特殊的环境下,可能下载会很慢,甚至连接会被重置;或者你需要断网开发而因为临时需要某些模块而不得安装;又或者哪天某个模块已经被移除废弃了,而你接手的旧项目又需要这个模块;基于这样或那样的理由,我着手在内网搭建了个npm镜像供团队使用,期间遇到了一些问题,让我们一步一步搞定它。 安装couchdb npmjs.org将自己的项目挂在https://github.com/isaacs/npmjs.org,需要制作镜像的同学可以按照说明来制作镜像,首先你需要安装CouchDB 1.1.0或更新的版本。 centos下输入命令: Shell 1yum install couchdb install couchdb 一阵刷屏以后couchdb就安装好了,然后启动它,你可以看到进程跑起来了 Shell 1/etc/init.d/couchdb start run-couchdb 由于couchdb默认是监听本地的请求,因此你需要配置它,让它可以接受来自局域网内的请求,将配置中的[httpd]段端口和地址前面的分号注释去掉,将127.0.0.1改成0.0.0.0然后重启服务即可 edit couchdb config 重启服务 Shell 1/etc/init.d/couchdb restart restart couchdb 然后就可以在其他机器上打开浏览器访问部署couchdb的ip和默认端口,看到Welcome信息说明安装成功了。 check couchdb ....

Uncategorized

小可 — 重新开始

还记得几年前丸子刚学开发时候做的那个代码分享工具么?围观地址:http://wanz.im/demo/code/。在凌晨睡不着的时候,它被丸子重构了,正式宣布退休了,新版本的功能精简了,并会不定期改进或增加新功能,如果你喜欢,并且想自己改一个的话可以到Github fork一下:https://github.com/hiwanz/Little-Code,赏个Star什么的,没有其他要求,不要移除footer的信息啦。 新版地址依然是:http://code.wanz.im/ 或者安装chrome应用Little Code:https://chrome.google.com/webstore/detail/little-code/eimiffcpncdedijkehjemnabclikjjcj

Uncategorized

动手写Android App之webview

看过前一篇hello world类的Android开发入门文章《Hello Android!》,也许你一点成就感都没有,那么接下来我来分享我后续学习的过程,使用webview内嵌HTML、CSS和JS做一个简单的App。 先睹为快,如图,我们需要做一个随机选餐厅的应用,它有三个tab可以切换,一个选餐厅面板,一个添加餐厅面板,一个关于面板: 虽然很简陋,但是看起来像那么一回事,所有的界面都是用HTML和CSS实现的,JS实现标签切换和随机选餐厅功能,正如你做普通的页面一样,你要做的只是把页面放到Android的webview里。 编写App界面 按照之前文章里的步骤,我们只需添加一个webview控件,把它设置为填充父级和隐藏标题栏,也就是说除了状态栏,它已经是“全屏”的了,布局代码如下: 布局文件main.xml代码 XHTML <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:orientation="vertical"              android:layout_width="fill_parent"              android:layout_height="fill_parent"        >    <WebView android:layout_width="fill_parent"             android:layout_height="fill_parent"             android:id="@+id/webViewMain"             ></WebView></LinearLayout> AndroidManifest.xml的application添加属性android:theme设置为无标题栏 XHTML <application android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:theme="@android:style/Theme.NoTitleBar">        <activity android:name="what2eatActivity"                  android:label="@string/app_name"                android:screenOrientation="portrait">            <intent-filter>                <action android:name="android.intent.action.MAIN"/>                <category android:name="android.intent.category.LAUNCHER"/>            </intent-filter>        </activity>    </application> 这样,Android控件就配置好了,接下来我们看看界面实现代码。 页面html结构: XHTML <!DOCTYPE ....

Uncategorized

看我如何劫持用户的浏览器

标题起的有点大有点夸张,但应该引起重视,起因是我在搜索一个东西的时候,打开了一个垃圾站点,神奇的事情发生了,新标签打开这个站点后,我的Google搜索页面自动跳转到广告页面了,出于好奇必须研究一下,首先它控制了我的Google搜索页面,所以我猜测它代码里有“Google”这个关键词,在Chrome控制台用强大的ctrl+shift+f搜到了几个js文件,前面都是Google广告的js,最后一个js.js是咸鱼饭,于是在这个文件里找到可疑的被加密的代码位置下了个断点。 经过耐心一直按F11跟踪后,控制台VM输出了解密后的关键函数。 看到这里基本上就知道了垃圾站劫持搜索页面的方法了,代码很简单有点基础的同学应该都可以看懂,这时我的想法是这么简单,我怎么没想到,思路很重要,到这里代码分析及实现原理就这样完了,简单到没什么可以讲的了。 垃圾站用这样的方式来刷流量刷广告很正常,但是我想到的是更可怕的事情,被访问页面可以劫持用户的来源页面,也就产生了一个钓鱼攻击的利用场景: 1,用户A在微博看到一个链接好奇打开了;2,被打开的页面evilA用一些吸引眼球的内容抓住用户的注意力;3,微博页面被劫持跳转到钓鱼页面,例如一个假的高仿的微博页面evilB;4,当用户关闭页面evilA,打算继续看微博的时候,此时他看到的是高仿的微博页面evilB,而用户没留意到页面已经被替换;5,高仿的微博页面evilB提示登录超时,要求用户重新登录,用户输入帐号密码;6,高仿的微博页面evilB记录用户密码后再跳回正常的微博页面,用户帐号在不知不觉中被盗; 测试页面:http://wanz.im/demo/referrer-hijacking.html Chrome 28.0.1500.72 m,Firefox 22.0成功劫持,IE 10.0.9200.16635提示没有权限 当然上述是理想状态下的钓鱼攻击,高端点的利用就是程序通过referrer信息立刻生成一个相同的页面来钓鱼,不注意防范依然有风险存在,上网需谨慎!

Uncategorized

Hello Android!

工作中有做过手机App项目,前端和android或ios程序员配合完成整个项目的开发,开发过程中与ios程序配合基本没什么问题,而android各种机子和rom的问题很多,这也让我产生了学习android和ios程序开发的兴趣。于是凌晨一点睡不着写了第一个android程序HelloAndroid,po出来分享给其他也想学习android开发的朋友,这么傻瓜的Android开发入门文章,有一点开发基础的应该都能看懂。 准备工作 主要以我自己的开发环境为例,下载安装JDK和Android SDK,假如你没有现成的IDE,你可以直接下载SDK完整包,里面包含了Eclipse,如果有IDE那么你可以滚动到下面选择USE AN EXISTING IDE,然后安装SDK,如果你的SDK在安装时找不到JDK目录,你可以在系统环境变量里添加JAVA_HOME变量,路径为你的JDK目录,我的IDE是IntelliJ IDEA,都装好以后开始配置IDE增加SDK支持。 首先,打开Android SDK Manager把Android 4.0以上版本的未安装的都打勾装上,根据你个人实际情况,如果你只打算用自己的手机测试,那就把你机子系统一样版本的SDK包装上,下载时间有点长。

Uncategorized

Javascript API文档生成工具YUIDoc入门

介绍 YUIDoc是基于Nodejs的可以将文档中的注释生成API文档的工具。它可以时时预览你写入的内容,支持自定义文档模版,生成的文档清晰易用,并且不局限于你所使用的语言,只要你的代码中按照YUIDoc规范的格式来写注释就可以生成想要的API文档,因此在各团队协作中用来作为统一的文档工具再合适不过了。 YUIDoc安装 以Windows环境为例,前面提到它是基于Nodejs的,所以在安装之前你需要先下载安装Nodejs(自带npm,无需另外安装)。安装好后就可以运行以下命令来安装YUIDoc了: Shell npm -g install yuidocjs 运行命令后,会看到一堆GET请求,之后YUIDoc就自动下载安装到Nodejs模块目录下并且将它加入系统的环境变量里,这样你就可以在任意文件夹下使用YUIDoc命令了。 开始使用YUIDoc 到这里你就可以开始使用YUIDoc来为你的Javascript项目生成文档啦,你可以在现有或者新建的项目的js里加入YUIDoc语法格式的注释(YUIDoc语法参考),然后运行cmd,切换到项目目录下运行以下命令,API文档就可以生成了: Shell yuidoc . 注意yuidoc命令后面空格加一个点,表示在当前目录下生成文档。运行命令后,YUIDoc会一次性生成该项目目录及其子目录下所有JS的文档,默认在不配置的情况下会生成在当前目录的out目录中。 实时预览 在团队协作的时候,如果你懒得去配置本地服务器,为了可以让其他成员方便的看到你的文档,可以使用YUIDoc快速构建webserver,其他人就可以通过浏览器访问到你的API文档了,具体操作是在你使用前面提到的命令生成文档后,然后执行以下命令: Shell cd outyuidoc . --server 7777 上面的命令,首先是在cmd里把当前目录切换到out目录下,然后使用YUIDoc构建webserver监听端口7777,这里的端口可以是任意未被其他进程占用的端口,后面的操作就是防火墙为此端口放行,这样其他人就可以通过访问你的ip:端口看到你的API文档了。 注意事项 YUIDoc中注释块必须至少以/**(两个星号)开头,代码是以模块划分,每个模块包含对应的类,而方法和属性是属于类的,因此如果你的代码里没有类的注释,那么方法和属性的注释就会被忽略而不生成对应的API说明,YUIDoc是基于注释生成文档,所以只要你有类的注释,不管这个类的代码是否真的有存在,就可以生成文档了,对于简单的没有模块划分的JS项目来说,可以用这个技巧来生成方法的文档。 扩展阅读 用yuidoc.json配置你的YUIDoc:http://yui.github.io/yuidoc/args/index.html#json

Uncategorized

深圳之行

由于某些不可抗因素(比如懒惰→_→),导致博客持久没有更新,借这次深圳执行抒发下感想。 这次应腾讯安全响应中心的邀请到深圳参加《TSRC 2013年首届安全沙龙》,对于我这个非安全圈子的前端来讲收获颇多。 4月19日一大早下着雨天气很闷热,从酒店跟着一群黑客溜达到腾大,在前台MM带领我们观光下腾大展厅(据说就是当年胡、习大大参观过的展厅,很荣幸啊有木有 )后就开始了一天的议程。第一次参加沙龙交流,第一次在这种场合领奖,心里万分激动,感谢TSRC给了这样的平台和机会,让我认识了许多知名黑客Y(^_^)Y,在这个过程中,也慢慢学会如何才能做好一个白帽子。去年TSRC刚搞不久,我还不知道这个平台,上传了个webshell到腾讯服务器,然后报给了Lake2,他说全在控制中,让我十分汗颜,服务器报警真是神速,也因为这次事情知道了这么个平台,后面在平台上提交一些漏洞,也收到了丰厚的回馈,可见腾讯对安全的重视和对白帽子的尊重是用心在做的,看着平台慢慢成长,对平台还是有很大的期望,希望它越做越好,越走越远。 下午的交流选在了3WCoffee,Snake玩着MAC脸上不时露出猥琐淫邪的笑容,301看到了表示很紧张,那货在劫持FreebuF的微博帐号。虽然我不做程序开发,但这次的交流中,黑哥(@superhei)的最短路径的防御思想给了我深刻的印象。会上分享的PPT:点击这里下载 TSRC(腾讯安全响应中心)是个好平台,具有里程碑的意义,让我这个外行从一个脚本小子慢慢成长为白帽子,希望会有更多的A-ZSRC出现为信息安全做出贡献,也希望更多白帽子加入这个队伍。 当然这次深圳之行除了参加沙龙,还有一个重要的事情就是见了许多神交已久的前端牛人和欢乐的“胖子”们,这里不一一点名了,感谢你们的招待与陪伴,深圳之行非常开心。 Yeevan是个好妹纸,你们要好好珍惜她;罗兰德是我见到过的第一个真宅男;Poor是王老吉大王;飘飘有种流氓气息;杰西卡早点回来混吧;婷婷眼睛小小的,赶紧嫁给那个法国小伙吧;谢谢小狮子的购物卡;moon姐真的是麦霸啊;大白真的像财神爷我会说么;兽兽说好的激活码呢;Tyrone是有后台的人,真是碉堡了,不要再喝到假酒了;小熊姑姑、未来大叔、音速和拖拖下次也来吧。

Uncategorized

网站SEO方案内容导图

首先声明这图不是我做的,在公司内部分享的,感觉还不错就po上来备份一下。 图中对一个站点SEO要做的内容做了详细又较为完整的划分,大家可以根据各自的实际情况作为参考并灵活运用。

Uncategorized

IE6下swfobject插flash时base标签问题

最近公司的游戏与腾讯合作做一个抽奖专题,公司的as设计师做了个抽奖的flash并给了个demo页面给腾讯的程序员去套,过程中出现各种问题,然后今天遇到一个比较怪异的,程序反馈说用swfobject插入flash在IE6下打不开页面,报错截图如下: Internet Explorer无法打开页面,操作被终止 然后我们的设计师妹纸就来跟我反馈了,简单的浏览了下源码貌似没有什么问题,后面发现有人也遇到过一样的问题,问题出在源码的head里有这样一句代码: XHTML <base href="http://这里马赛克了.g.act.qq.com/" /> 按照规范,这样写没什么问题,但是在IE6下用swfobject插入flash会出现上图那样的bug。解决办法也就明了了: 如非必要,直接去掉base标签虽然不符合规范(html4规范中base标签是禁止用</base>闭合标签的),但是可以用</base>来闭合标签解决这个bug,折中的办法可以用条件注释来通过验证经测试,在DOMReady后执行插入flash也可以解决 第二种方式的写法如下: XHTML <base href="http://这里马赛克了.g.act.qq.com/"><!--[if IE]></base><![endif]--> 至于为什么会出现这样的问题,表示不明了,通过这三种解决方案,我的猜测是IE6对未闭合的base标签处理有问题,使得DOM解析变慢,而swfobject在DOM树还没构建完成的时候执行了DOM操作导致bug,求知情者告知,感谢。

Uncategorized

phpBB < 3.0.10 附件物理路径泄露

目前位置仍有很多站点,包括一些比较出名的站点,他们的服务器仍存在某Nginx FastCGI漏洞,前不久研究了下某编辑器遇到了点问题,到官方论坛去提问,顺手就测试了下,发现该服务器也存在这个漏洞,于是就想再顺手测试下去,我需要一个可以上传的点,然后申请了论坛邀请码,注册发帖提问,蹲点了一段时间,后来,就忘记了这回事→_→! 前两天编辑器更新了,今天上论坛去回复管理员的帖子,发现可以上传附件了,于是上传了一张图片,得到的地址类似这样: http://VICTIM/bb/download/file.php?id=1 这样的地址完全无法利用,看了下论坛程序使用的是phpbb这套程序,搜索了一圈也没有爆物理路径的文章,于是去官方下载了最新的源码(phpBB 3.0.10)来分析,地址:http://www.phpbb.com/downloads/,果然得自己动手丰衣足食啊。 第一目标就是锁定file.php这个文件了,看了下附件文件的URL地址构成: PHP //论坛程序路径+上传目录+文件名$phpbb_root_path . $config['upload_path'] . '/' . $attachment['physical_filename'] 最终定位到物理地址是程序下的files目录,但是文件名是一个hash值,这样我无法准确的得到文件的URL,于是继续看源码,发现有个缩略图功能: PHP //判断缩略图参数是否存在,是的话给定一个缩略图文件名,缩略图文件名为大图文件名前加“thumb_”if ($thumbnail){ $attachment['physical_filename'] = 'thumb_' . $attachment['physical_filename'];} 而我在本地测试了上传,发现默认是没有生成缩略图的,就是说默认没有开启缩略图功能: PHP //默认请求缩略图的参数值是false$thumbnail = request_var('t', false); ....