钓鱼网站url的识别

昨天偶遇个钓鱼网站的数据集,提供了很多url的特征,就好奇这东西有多难识别,于是简单地做了一下, 发现随机森林就能跑到93%。
其中最重要的特征是网站有没有https头,18个特征里能占0.3。

给新手们附上链接和实验过程:
1.下载数据集(需要注册)
2.因为test.csv没标签, 所以从train里抽一点出来,可以37开可以55开。
3.数据里有缺失值,因为后面要用lasso做特征选择,所以把数据中的0改成-1,把NaN改成0.
4.删了几个占比低的特征后,用随机森林跑出了0.94的分数。
5.但因为我把NaN改成了0,而NaN是无意义的, 0却是介于-1到1之间,在计算时有了分界的意义,所以随机森林只能作为参考。
6.最后用keras搭的三层线性模型,只有最后一层用了sigmoid,得到90.6%的分数。

总结:没啥总结的,数据太少特征很强,很难有普适性,实际中只靠url识别是很不靠谱的。我了解到现在会生成网页的图片,并比对结构代码,因为钓鱼网站虽然能模仿网页,但代码肯定不一致。有些网站会加载一堆奇怪的插件,有些会有很多弹窗,有些会写死逻辑让你跳不出去,这些特征都得懂前端的人来配合获取了。

### 使用MATLAB实现钓鱼网站URL检测 为了有效识别钓鱼网站,可以通过构建机器学习或深度学习模型来处理和分类URL数据。考虑到URL字符串的特点以及其潜在模式,可以采用多种方法进行特征提取并训练相应的分类器。 #### 特征工程 在准备阶段,需要对原始URL数据集执行预处理操作,包括但不限于去除协议头、解析域名部分、统计字符频率等。这些步骤有助于减少噪声干扰,并突出显示可能指示恶意行为的关键属性[^4]。 ```matlab function features = extractFeatures(url) % 去除http:// 或 https:// url = regexprep(url, '^https?://', ''); % 提取主机名 host = regexp(url, '/', 'split'); if ~isempty(host{1}) hostname = lower(char(host{1})); else hostname = ''; end % 统计特殊字符数量 specialCharsCount = sum(ismember(hostname, '-_.')); % 计算长度 lengthOfHostname = numel(hostname); % 是否含有IP地址形式的host containsIPAddress = any(regexp(hostname, '\d+\.\d+\.\d+\.\d+', 'once') ~= []); % 返回特征向量 features = [ lengthOfHostname; ... specialCharsCount; ... double(containsIPAddress)]; end ``` #### 数据获取与标注 收集已知合法及非法样本作为训练基础非常重要。可以从公开资源下载经过验证的数据集,确保正负类别的平衡分布以便后续建模工作顺利开展。 #### 构建分类器 选择合适的算法建立预测模型。这里推荐使用支持向量机(SVM),因为它擅长处理高维空间下的线性和非线性问题,在文本挖掘领域表现良好。当然也可以尝试其他类型的监督式学习技术如随机森林(Random Forests)或者神经网络(Neural Networks)。 ```matlab % 加载训练数据 load('phishing_dataset.mat'); % 获取标签 labels = dataset.Label; % 对所有url应用特征函数 numSamples = height(dataset); allFeatures = zeros(numSamples, 3); for i = 1:numSamples allFeatures(i,:) = extractFeatures(dataset.URL{i}); end % 划分训练集/测试集 cv = cvpartition(labels,'HoldOut',0.2); trainIdx = training(cv); testIdx = test(cv); XTrain = allFeatures(trainIdx,:); YTrain = labels(trainIdx); XTest = allFeatures(testIdx,:); YTest = labels(testIdx); % 创建SVM分类器 svmModel = fitcsvm(XTrain,YTrain,... 'KernelFunction','rbf',... 'Standardize',true); % 预测新实例类别 predictedLabels = predict(svmModel,XTest); % 展示混淆矩阵 confusionchart(YTest,predictedLabels); ``` 上述代码片段展示了如何定义一个简单的特征抽取流程,并基于此训练了一个二元分类的支持向量机模型来进行钓鱼站点判别。实际部署时还需要进一步优化参数配置、调整特征组合等方式提升泛化能力。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值