前幾年搞了個“釣魚網站智能檢測系統”的網站,運營了三年后下架了,效果不是很好,唯一的識訓是讓我體會到“做好一個產品,光靠技術是不行的”,
下面我從技術層面把產品開發程序分享下,
1、部署網站
傳統的方式一般是先購買一臺性能好點的服務器,放置到某個機房,然后購買公網ip,購買域名等,
現在比較主流的方式是直接購買云服務(百度,騰訊,阿里,亞馬遜等),服務器、公網ip、域名等一站式搞定,
特別需要注意的是,在中國需要給你的網站備案,備案的方法云服務商也會告訴你,
2、產品定位
這個產品主要是幫用戶檢測釣魚網站,當時是作為一個獨立站,其實最好的方式是以插件的方式集成到瀏覽器、郵件客戶端等,
3、技術實作
涉及的技術點有BP神經網路,釣魚網站樣本集,web框架,網站黑白名單等,
1、BP神經網路
詳細關于BP神經網路的描述,可以到網上搜索,也可以參照這里,
神經網路庫比較多,本產品中使用的是pybrain,
2、釣魚網站樣本集
樣本的收集作業也是比較耗時的,如下網站有收集好的釣魚網站樣本集,可以直接使用pybrain訓練神經網路,這個uci貌似比較厲害,存盤了比較全的機器學習相關的資料集,
http://archive.ics.uci.edu/ml/machine-learning-databases/00327/
3、web框架
涉及到python,bottle,jquery,bootstrap等技術,這里不詳細展開了,這里簡單講下將網站關聯到微信公眾號的方法,首先需要申請一個微信公眾訂閱號或服務號,然后簡單設定,如下:

將appid,token等資訊配置到自己的網站,如下:
#!/usr/bin/env python
#coding=utf8
import urllib2
import json
import hashlib
import time
import xml.etree.ElementTree as ET
WEIXIN_TOKEN = '****'
WEIXIN_APPID = 'wx26942ed464cbb444'
WEIXIN_SECRET = '917cd5d34143e3cd2a1b366228f27ae2'
WEIXIN_URL = 'http://phishfeeds.com'
class weixin_handle:
def get_access_token(self):
url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s' % (
WEIXIN_APPID,WEIXIN_SECRET)
result = urllib2.urlopen(url).read()
weixin_access_token = json.loads(result).get('access_token')
print 'access_token===%s' % weixin_access_token
return weixin_access_token
def message(self , body):
data = ET.fromstring(body)
tousername = data.find('ToUserName').text
fromusername = data.find('FromUserName').text
createtime = data.find('CreateTime').text
msgtype = data.find('MsgType').text
content = "本公眾號可查詢釣魚,詐騙等惡意網站,如果您遇到可疑網站,可訪問如下網站進行查詢!\n\nhttp://www.phishfeeds.com\n"
textTpl = """<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
<MsgId>1234567890123456</MsgId>
</xml>"""
out = textTpl % (fromusername, tousername, str(int(time.time())), content)
return out
def get(self,signature,timeStamp,nonce,echostr):
if timeStamp == None or nonce == None:
return None
tmp = [WEIXIN_TOKEN, timeStamp, nonce]
tmp.sort()
raw = ''.join(tmp).encode()
sha1Str = hashlib.sha1(raw).hexdigest()
print sha1Str
print signature
if sha1Str == signature:
return echostr
else:
return None
def post(self,body):
return self.message(body)
4、網站黑白名單
通過爬蟲,定期到如下兩個站點獲取完整黑白名單,所謂黑名單是指已經確認是釣魚網站,所謂白名單是指已經確認是正常網站,
黑名單
http://data.phishtank.com/data/68b4c2263bc5687ad3f275f69de3dbba4ae5219aa88c349125d73a064260f866/online-valid.csv.gz
白名單
alexa
http://alexa.chinaz.com/Global/index.html
4、源代碼
https://github.com/yanjinjin/phishing_AI.git
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298598.html
標籤:其他
