使用金山云盾API检测网址安全性【钓鱼、病毒/木马/恶意软件下载链接 】

前天在无意浏览irc机器人记录的log时发现机器人的天气查询指令weather不能使用了,于是就立马测试了下发现原来是天气接口api的提供者(聚合数据)改变了策略,由原来的免费改为收费了(哎,人与人之间最基本的信任还有没有了。。。。。。),此次变更影响了我的irc机器人中的几个指令,目前正在找寻其它接口(所幸影响到的几个指令都是些使用及其稀少的功能= =),这其中之一便是网址安全检测功能。
原网址安全检测接口是由聚合需要查询的网址。需进行urlsafe base64编码数据提供的,而安全检测是由360提供的,网上搜索了下也找到了360的接口,但是这个接口的申请有些麻烦,如果360的审核人员在看到于12月32日由天顶星公安局颁发并印有奥特曼头像的二代中华人民共和国身份证截图的话,会不会为了维护一个和平、稳定、繁荣、和谐、向上的宇宙而给予通过,但显然我对于这些个高端冷艳的地球人类是没有足够的信心的。。。。。。。。所以我决定在提交了申请以后继续寻找目标,这就让我找到了另一家地球安全公司提供的接口–金山云盾开源计划,api文档地址在这里可以看到
http://code.ijinshan.com/api/devmore4.html#md1

金山云盾目前开放了两个接口,一个是检测网址是否为钓鱼网址,另一个接口是查询一个网址是否属于病毒/木马/恶意软件下载链接,两个接口的参数完全相同,使用方式基本一致,所以就里我就只简单地说下钓鱼网址检测的接口,当然这其实是很简单的,不管是参数还是使用方式,包括返回的数据都灰常简单。

两个接口的地址分别是
http://open.pc120.com/phish/
http://open.pc120.com/download/
这没什么好说的,而参数有四个分别是

q 需要查询的网址。需进行urlsafe base64编码
这里说下什么是safe base64编码,为了简洁我们就取两个单词的首字母我们称它为SB编码,那么什么是SB编码吗?这个所谓的SB编码其实说来很简单,就是先将其进行base64编码,然后对编码后的字符串进行一些替换,要替换哪些东西呢?只有两个字符,+和/,将进行base64编码后的字符串中的+替换成-,/替换成_(下划线),是不是很简单,这就是SB编码,真是码如其名。
继续说参数,第二个参数是appkey,这个参数便是申请到的key,也就是那个帐号(不知道为什么要叫帐号,地球生物果然非同凡响)
第三个参数是timestamp,该参数的值是一个时间戳,为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数
最后一个参数是sign,这便是本文要说的重点(什么这才是重点!没错,前面说的都是废话!!!),这个参数需要我们动态生成,没错就是一个签名了,至此这个签名的算法,我们下面就讲。

sign签名算法的生成方法大可以分成两部分,第一部分得到一个基字符串,第二部分得到签名字符串。
我们先来看第一个部分
基字符串可以分为两个部分
GET的目录+参数
所谓GET的目录就是/phish/或者/download/,由于这里我只说下钓鱼接口,所以这里应该是/phish/
而参数便是上面说到那些参数,当然,此时我们还处于计算签名的过程,所以只需要前三个参数就足够了,而这三个参数的顺序也是有要求的(地球生物真麻烦),参数需要以字典顺序进行排序,也就是a在前b在后,很简单,由于这里参数个数固定且数量也比较少,所以我们直接就可以手动进行排序了,很简单,appkey、q、timestamp,我们来看一个例子
比如我们的帐号是:k-33356
要查询的网址是:www.abc.com
时间戳是:1410439286
那么我们先将www.abc.com进行SB编码(只有这一个参数需要SB编码),www.abc.com进行base64编码后是
d3d3LmFiYy5jb20=
查看一下,很好,没有+也没有/,所以这也是SB编码的结果(我好像发现了什么,base64编码即是SB编码。。。。。)
那么我们的基字符串就是
/phish/?appkey=k-33356&q=d3d3LmFiYy5jb20=&timestamp=1410439286
注意URL参数之间的连接符,这个我不用多说了吧

第二部分便是计算签名了,这个部分也可以分两步,(人类啊,你永远都是这么的麻烦)
第一部分将密钥追加到上面生成的基字符串上生成一个新的字符串
第二部分将新生成的字符串进行md5编码,生成一个32位十六进制字符串,该字符串便是第四个参数sign的值
比如我们的密钥是:a176201e188a0969cd7b7fa2ef3c8d14
那么我们第一部分生成的字符串应该是
/phish/?appkey=k-33356&q=d3d3LmFiYy5jb20=&timestamp=1410439286a176201e188a0969cd7b7fa2ef3c8d14
第二步进行md5编码生成
340d4e5ac05e0dcbfb19795f7e6891fa

那么最终我们访问的接口地址是
http://open.pc120.com/phish/?appkey=k-33356&q=d3d3LmFiYy5jb20=&timestamp=1410439286&sign=340d4e5ac05e0dcbfb19795f7e6891fa
注意我们最后访问的地址加上了sign参数,这样四个参数就都聚齐了,传说了聚齐七颗龙珠可以换一愿望(应该是这样吧),而我们聚齐四个参数就可以检测网址是否为钓鱼网址了,返回的数据大概是这个样子的
{“success”: 1, “phish”: 0}
什么,你返回的不是这个?那可能是这个链接已经过期了,你可以需要重新设置时间戳并计算签名了。

至于另一个接口检测下载链接是否为病毒木马的那个跟这个完全是一回事情,这里就不多说了,下面给一个代码示例吧。

至于这次我为什么这么大方的将帐号与密钥共享出来了,那是因为目前金山云盾开放出来的是一个公共的appkey啊,按着官网的说法,有其它意向的话请直接联系他们。。。。。。。。
可恶的地球生物啊!!!!!!!1

–阅读次数(66)

发表评论

电子邮件地址不会被公开。

*