Google Authenticator / D令牌 网页版

Google的两步验证想必大家都有听说过或者用过吧,至于D令牌则是DnsPod的两步验证,用的其实也是Google Authenticator的一模一样的算法,而Google Authenticator的算法实际上是一个叫做HOTP(参考)的东西。
由于算法是开源的,那也就是说可以用任何方法来实现它。这里我直接选了我最熟悉的php来写。考虑到这个东西肯定有人已经写过了,所以Google一下找到了这么一个神奇的类库(参考)。这个类库可以实现一些简单的功能,比如生成当前时间的二次认证的token,比如验证一个token和它的secret key是不是一致(前后差距可以有两分钟)之类的。用法我就不仔细说了,自己戳到参考链接里面可以看到详细的用法和完整的源码,这里我来说说我写的这个HOTP网页版怎么用。

由于代码比较长,所以我把代码贴到了Gist里,!猛戳这里查看!,直接从上面把代码复制下来放到一个php文件里面就好了。

看到开头的配置部分,修改对应的参数就能使用了。第一个密码是打开这个网页的需要密码,为了保密性而防止其他人使用的一个验证措施。后面是对应的账户标题和密钥。前面的标题可以随便写,只要自己能记住这个密钥是哪个账户的就行了,而后面的密钥要怎么获取呢?在DnsPod和Google绑定两步令牌的时候,我们看到的都是二维码。但是这个二维码下面会有一行小字,类似于“无法扫描二维码?”或者“手动输入绑定”之类的,点击就能看到一个密钥。把里面的空格去掉,无视大小写粘贴到php里面就行了。
首次打开的时候会让你输入密码,输入在php里面设定的那个密码就行。或者你也可以这样访问它:http://your/path/to/totp.php?key=你的密码 , 这样就不需要输入密码也能够看到你的令牌了。它会30s自动刷新,要保证你的服务器时间和标准时间误差不超过2分钟哦,不然密码就没用了。至于时区倒是不那么重要,反正是基于GMT标准时的。

入手zml.pw,十一名(11th)优惠码 – 可能是最便宜的pw域名购买方法

手贱,买了一个pw域名,在十一名买的,人民币结算,价格公道,首年仅CNY 9.99。搭配下面的优惠码,可获得4%的折扣(折后9.5元,能省则省,虽然还不到5毛)。

L3S0RQU1F7H6

看了下11th的域名价格,挺公道的,不过我也是第一次接触这家域名商,对它的服务了解不多。之后如果有什么经历会另外写文章分享。
zml.pw,一开始取自“怎么了”,然后发现还有最美丽,早买了之类的意义,感觉还蛮有意思的,不知道最后这个域名是被我卖掉还是自己用。要是有想买的看官,可以从右边的留言板看到我的邮箱或者直接留言,价格合适的话我就出手算了。
现在pw的资源还是不少,四位数字或者三位字母的域名还是一抓一大把,不过有很多人不看好它。私以为要是自己用的话,短,快,简洁的名字能够节约自己的时间同时显得更加专业和geek;商业或者建站的话,如果意义不错还是可以拿来一用的。
注,通过我的推荐链接(http://www.11th.com/?affid=217)注册,我可以拿到5%的返利;但是如果使用L3S0RQU1F7H6优惠码,则这5%的返利中有4%是归你的(后台不能设置5%,要不然我就设置了)。如果不希望我拿这1%的返利,请从无返利链接 进入。

【旧闻】GitHub Pages 转移至github.io域名下

刚刚看自己的项目主页的时候才发现自己的项目地址变成了github.io域名而不是原来的github.com域名。Google查了一下,发现是五天前的事情了。(via GitHub 开发者页面迁至 github.io – OSChina
据称,此举主要是防止cookies盗取、CSRF和依托github.com域名的钓鱼网站。
于是,我们有了一个很简单的方法判定一个页面是否属于GitHub Pages(而不是GitHub自己)。不知道GitHub Pages在中国的命运会走向何方。

bpcs_uploader 更新:快速初始化、内置app key、正常使用离线下载

如题,这次的更新主要是以下几个方面:

1.加入快速初始化功能:只要敲入quickinit命令,即可进入快速初始化流程,只需一个y键和一个浏览器~

2.内置的app key:随快速初始化功能附赠

3.正常使用离线下载:现在百度PCS的离线下载API开放了,于是就可以离线下载HTTP文件了~

嘛,以上。欲知详情,点击bpcs_uploader项目主页~

更换到Typecho的记录

看看Hello world,更换成typecho也有两天了。

看着Google Reader离我远去,深深的感觉到本地数据为王的意义是什么了。于是,就把is-programmer的文章,完全手工复制粘贴移动到了这里。

这里是我在洛杉矶的VPS,就是之前提到过的LocVPS(via LocVPS|无推介链接)。国内访问速度一流,价钱公道,ticket响应快,到现在除去我的原因也才宕机过3分钟左右。

由于放了很重要的站点,预计会要一直续费到LocVPS倒掉(喂)。考虑到……博客还是有会消失的那么一天……嘛,谁能算计那么多呢?只能自己守着博客慢慢变老了(大雾)。

嗯……目前的感觉还不错。访问没有那么卡了,页面基本秒开,比较舒畅。

我从未想过Google Reader会被关闭

虽然我不用Google Reader,但是我明白这是一个不可多得的好工具。

从QQ邮箱订阅中看到古奥连续PO出一大堆挽回的GR的新闻,小众,月光,我所订阅的一切科技博客无不在重复这个主题。

Google Reader都要被关闭了。这个事实大概是目前为止Google关闭的服务中最重量的一个吧。

我从未想过Google Reader会被关闭。

我从来都觉得,GR和Gmail,甚至Google Search本体一样重要。因此,Google关闭它完全出乎我的意料。

当然,这好像提醒了我什么。

嗯,对。任何一个互联网服务——甚至线下的服务,无论是收费抑或免费,终究有走向终结的那一天。服务不贵,数据最贵。放在Google,或者放在其它什么地方的数据终究没有放在自己硬盘上来得放心。

之前,我的观念并不是这样子。我觉得,我的文章,我的思想和我的数据的全部,都应该放到大公司的托管下——这样,我的思想才会得以保存起来,在我无暇管理它之后也是那样。但是,我从未想过,这些托管的服务本身都是不那么靠谱的。

嘛。大约从现在开始我会慢慢的把博客搬去某个地方的Typecho吧。嗯,基于思想的传承的观点,我决定还是把博文同步到某些BSP上去。

Google Reader已死。

Evernote账户信息泄漏 – 谁动了我的帐号

今天收到一封来自Evernote的邮件,其中部分内容如下(原文截图):

亲爱的Evernote International用户,

Evernote运营和安全团队最近发现并成功阻止了一项针对Evernote网络的可疑活动,该活动可能试图有组织的接入Evernote服务的安全区 域。为预防未来的潜在数据隐患,我们决定请求所有用户进行一次密码重置。请阅读以下内容了解详情和步骤。

通过一次全面仔细的检查,我们未发现任何迹象表明你保存在Evernote中的任何内容被访问过、修改过或丢失。Evernote高级帐户的付款信息和Evernote企业帐户也没有任何被访问过的迹象。

但是检查显示,参与这次可疑活动的人员能够访问到Evernote的用户信息,包括与Evernote帐户关联的用户名、邮箱地址和加密过后的密码密文。 尽管密码密文有可能被访问,但请特别注意,保存在Evernote中的所有帐户密码密文均采用不可逆的单向加密算法(one-way encryption)生成。(用专业术语表示,即所有密码密文都是经过哈希算法处理并随机生成(hashed and salted))

从CSDN密码泄漏门,到Twitter用户密码被重置,直到这次Evernote也不幸中枪。一次又一次的针对互联网帐号的攻击事件频频发生,各大服务运营商中枪,就连推特、Evernote这样的服务也在所难免。难道我们的互联网帐号信息已经不再安全了吗?

现阶段,主流的密码加密方式即上文中提到的“hashed and salted”(哈希加盐)法。这种方法由于是单向加密,而且对密码加入了随机字符串salt,安全系数大大提高。但随着硬件的发展,要破解哈希加盐也不是很困难的事情。攻击者通过构建大型彩虹表,有一定几率来破解经过单向加密的密文。

但需要提到的是,对密码进行加密存储是用户信息安全的「最后一根稻草」。因为破解加密存储是在黑客拿到用户数据库后才可以进行的操作,假若用户数据库足够安全,只要数据库不被泄漏,那么即便是明文存储也不会有太大的风险。这并不是说被hacker攻击的twitter和Evernote做的不够好,因为在这么多年来,在数千万甚至数亿、十亿数量级的攻击下,这种事情也只发生过少数的几次。

话又说回来,最近这种事情发生的几率正在逐步攀升。不知道是现在的hacker技术变得更加高明了呢,还是现在的firewall已经无法阻止hacker前进的脚步了。

那么,作为个人用户,我们要怎样从个人角度来防止这些事件的发生呢?只有降低用户资料的价值,才能从根本上减少事件发生后的损失。作为用户,你的资料的价值是什么?对于一个网络服务来说,你的资料意味着你的用户名、密码和电子邮件地址。如果你所有的网上服务包括网银、电商、电邮、公司办公系统都是用的同一个密码,你的资料的价值无疑会很高;如果所有的服务使用不同的密码组合,那么,资料的价值就会降低到仅有的被攻击的服务那一个帐号。所以,最终的防范秘诀就是:使用密码管理方案。

密码管理方案有很多种,比如花密,LastPass都是很好的选择,这里要介绍的不是那些记录密码的工具,或者像花密那样的base+salt的方式——毕竟有时候需要离开他们——而是一种便于记忆的管理的方案。我称之为分级管理模式。

一个完善的密码系统,应该包括至少三个级别:

低级密码,即「用一次就丢」的密码。这样的密码最好还搭配一个另外的用户名,以满足各种「一次性」的帐号需求。这种密码只需要有一个,然后在各个小网站、不确定安全性的网站和用一次就丢的网站使用。

高级密码,即「相当重要」的密码。这类密码不要和你已有的密码雷同,而是采用全新的组合,最好是包括大小写字母符号数字等,用于独立的重要服务,例如电邮、IM工具(QQ、MSN等)和财务(电商、网银等)。

最多最常用的密码,也就是「不是相当重要也不是用一次就丢」的中级密码。这样的密码是使用最为频繁、又有一定价值的。如果让所有的这类中级网站共用一个密码,也不是一个好的方法:黑客仍然可以通过获取其中一个来得到其它的。或许有人会想到一串固定字符加上网站的主域名,我只能说黑客也一眼就能看出来你的密码中有个域名从而破解。这里介绍一种思路,或许会对你的密码有帮助。

这种思路的灵感是从md5来的。md5是一种「摘要」算法,那么我们也可以将域名的所谓「摘要」放到密码中去。这么说还不明白的话,看一个简单的例子。比如对「Google」的域名,我们可以摘它的最后一位「e」,然后放到密码中的某一位。比如密码的基准是「BestWishesTo」,我把摘要字母放到最后一位并大写,也就是「BestWishesToE」,这样的话即使是得到密码的黑客也不会知道你其它网站的密码——除非它最后一位也是E。如果觉得还不够安全的话,可以继续摘录并进行适当的运算。比如摘「Google」的第一位「G」,在字母表上将他往后挪动3位变成「J」然后小写放到刚刚密码的最后面,加入「Google」这个单词的长度6放到第一位,成为「6BestWishesToEj」,这样还看得出来你的密码的本来面目吗?除非还有一个网站叫「Gxxxxe」,否则你的密码也不会被用到其它网站上去——这样的可能性不是很大,而且你会在一个叫做「Geoeoe」的网站用上你的中级密码吗?

这样一来,帐号丢失所损失的价值就减少了不少。当一个网站的密码被盗时,并不会牵连到太多的网站。

另外,加强自己的帐号保护意识,对电脑定期杀毒(其实有点扯,主要是防键盘记录类的木马神马的),并且在输入帐号的时候注意网站是否安全(检查网站域名、检查https等)就好了。这样一来,即使是某个网站被爆出使用明文存储密码而且数据库被大量泄漏的话,你也可以安然不动,笑看众人疯狂改密码了。(完,本文由oott123纯原创,转载请保留出处。)

bpcs_uploader – 百度网盘上传脚本

碎碎念先:寒假都快结束了,这才第二发……好吧,这个脚本纯属无聊的作品。之前不是有用脚本上传dropbox的嘛,我寻思着写个百度网盘的用用看。我那蹩脚的Prel和shell script根本没法完成这种略微有点技术含量的东西,所以完全使用php来写了。

项目主页:http://oott123.github.com/bpcs_uploader

嗯……只在cygwin和一台Centos上测试过,未在其它系统上通过测试。

系统要求

Linux (or cygwin) with php & curl installed.

使用方法

$ chmod +x bpcsuploader.php
$ ./bpcs
uploader.php

由于VPS上安装的php可能存在于各种地方,因此运行很可能不正常。请以使用which php得到你的php绝对路径,修改bpcs_uploader.php的头一句#!后的路径。
如果你的php是为了网站环境安装的,那么很有可能你会得到下面这条错误消息:

xxx() has been disabled for security reasons

那么说明你的环境由于安全原因禁止了部分函数的执行。请看FAQs的1。请使用那条长长的命令代替./bpcs_uploader.php。eg:php -d disable_functions -d safe_mode=Off -f bpcs_uploader.php quota

初始化

./bpcs_uploader.php init

敲下命令之后会进入初始化流程,这里分段详述设置方法。

Now start the initiation. If you have configured the uploader , it will be overwirte.
Continue? [y/N] y

确认初始化。如果之前有初始化过,那么以前的配置将会被覆盖。

Now you have to enter your baidu PSC app key . You should know that it needs a manual acting.
You can request for it via http://developer.baidu.com/dev#/create .
Make sure you have the PCS app key . if you haven't , you can use the demo key from Baidu.
It will exprire some time. who knows ? so the best way is to request for your own key.
There are a demo key from Baidu : L6g70tBRRIXLsY0Z3HwKqlRE So if you dont have the app secret , you have to re-init every month , for the access-token will expires every month.
App KEY [L6g70tBRRIXLsY0Z3HwKqlRE] :

第一步,输入App key。这里需要输入一个有PCS权限的API KEY,如果没有的话直接敲回车就好了,这里会默认使用百度提供的一个demo API KEY。不过,由于百度没有公开app secret,所以只能获取一个有效期为一个月的access token。如果有一个有PSC权限的API KEY和secret,那么就能获得一个有效期为10年的refresh token,以便长期使用。

App key has been setted to L6g70tBRRIXLsY0Z3HwKqlRE .
Now you have to enter your baidu PSC app secret. If you dont know the secret , keep it blank.
App SECRET [] :

第二步,输入App secret。如果输入了app secret,将会转到device code模式验证;或者直接输入回车使用oob模式验证。先直接回车:

Now you have to enter your app name. You can enter it later in the file [ /root/bpcsfiles/config/appname ].
* Why i have to enter app name ? see FAQs.
If your app name have Chinese characters , please swith your client to the UTF-8 mode.
Here are some chinese characters . Before you enter chinese characters , make sure you can read these characters.
如果你看到这里,说明你可以直接输入文字了。
If you cant read any chinese above , please press enter , and change it manually in the file [ /root/
bpcsfiles/config/appname ] .
If you have Enter the key [L6g70tBRRIXLsY0Z3HwKqlRE] (by default) , just press Enter.
App Name [pcstest_oauth] :

第三步,这里需要输入app name。详情见FAQ 2。因为是使用的默认的key,所以直接回车即可。

Now you have to get your oauth accesstoken by your own .
Here is a reference document .
http://developer.baidu.com/wiki/index.php?title=docs/pcs/guide/usage
example

A simple guide :
1.visit https://openapi.baidu.com/oauth/2.0/authorize?responsetype=token&clientid=L6g70tBRRIXLsY0Z3HwKqlRE&redirecturi=oob&scope=netdisk
in your broswer.
2.when it redirected to a html page , copy the url to the notepad.
3.get the access
token from it , paste it and press Enter.
access_token[] :

第四步,获取access token。在浏览器中打开上述URL( https://openapi.baidu.com/oauth/2.0/authorize?responsetype=token&clientid=L6g70tBRRIXLsY0Z3HwKqlRE&redirecturi=oob&scope=netdisk ),进行授权。
授权完毕后,将会跳到一个写着“百度 Oauth2.0”的页面。复制出其中的网页URL,找到access
token=和&之间的字符串,例如: 3.**05c2ea85d52c2***************a5.2592000.136***9032.3089166538-23**47
将其复制到shell中粘贴并回车。使用这种方式初始化的用户,需要每月重新初始化。

如果第三步输入app secret的时候没有留空,将会得到下面的消息:

Now open your broswer and visit https://openapi.baidu.com/device .
Copy or input 12abcxyz when it been asks.
After granted the access to the application , be back and press Enter key .

来到这里,打开浏览器访问 https://openapi.baidu.com/device ,在“请输入设备上显示的用户授权码:”文本框中输入上面显示的授权码(这里是12abcxyz),并点击继续。看到网页上显示“请返回设备继续操作!”后,返回ssh上按下回车后,即可继续。

curl -X GET -k -L "…."
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 62 0 62 0 0 40 0 –:–:– 0:00:01 –:–:– 235
Success . Your Storage Status : 0.06G/115.00G (0.05%)
Have fun !

你所看到的输出可能和这里给出的不一样,但是只要看到了存储空间的剩余量,和【Have fun !】提示,即说明成功初始化。

查询容量(配额)

./bpcs_uploader.php quota

结果:

Your Storage Status : 0.06G/115.00G (0.05%)

上传文件

./bpcs_uploader.php upload [path_local] [path_remote]
路径格式:foo/bar/file.ext(路径中一定要包括文件名)
上传后,能在百度网盘/我的应用数据/应用名/foo/bar下找到一个叫file.ext的文件。

下载文件

./bpcs_uploader.php download [path_local] [path_remote]

删除文件

./bpcs_uploader.php delete [path_remote]

离线下载

./bpcs_uploader.php fetch [path_remote] [path_to_fetch]
注:离线下载暂时无法在一般的api key授权的情况下使用,需要另外申请开通。

FAQs

  1. 各种错误提示
    试试php -d disable_functions -d safe_mode=Off -f bpcs_uploader.php
  2. 为什么要输入app name?
    因为百度PCS的权限被限制在了/apps/appname/下。如果发现输入app name后仍然无法上传文件,请通过网页版找到【我的应用数据】找到对应的文件夹名,写入/config/appname文件。上传文件的时候会自动帮您处理文件夹,无需手动写出完整路径。

随手扒拉的一个有意思的源码

从free8上看到一个源码(http://www.free8.net/thread-72510-1-1.html),觉得蛮有意思的,随手做了一个后台,放出来给大家玩玩。

admin_panel.php是后台,没有任何验证,建议改名为比较复杂的文件名就好了。

放上一个演示先:http://summer.p.ht/simple

下载点照例是skydrive。http://sdrv.ms/X5aTQ9