托攻击检测SDlib库的学习-----WZW托攻击学习日记(二)

       大家好,今天我研究了大师兄做的库,名字叫做SDlib,是专门针对托攻击检测的,使用的语言是python,有兴趣的同学可以参考。大师兄的库是放在github上的,大家可以多多star送给我敬佩的大师兄。链接如下:

https://github.com/Coder-Yu

下面讲一讲,SDlib中如何注入虚假信息的。

第一步,下载好SDlib的压缩包,解压出来。这一步不浪费时间解释了,百度一下就会。

    

图一

第二步,仔细阅读了SDlib中的Readme,里面对于这个库有着比较详细的解释,这里呢,如果只是想看如何注入虚假用户的,可以直接跳到如图所示的地方。

图二

从中可知,如果不想了解原理,只需要改变conf文件中的变量就行,这里呢,我肯定是要讲讲更细节的东西,如果只想注入虚假用户的话,那就直接运行generateData.py就行了。

好,接下来,进入正题。了解代码含义。

首先,运行generateData.py观察运行结果。

部分截图为:

图三

我们会发现,系统正常运行了。并且出现了多次注入,即出现了多次loadingtraining data。现在寻找原因。

 

来到generateData.py,观察到generateData.py中的代码很少

图四

发现调用了HybridAttack,打开HybridAttack.py,发现HybridAttack的基类为Attack。所以转到attack.py文件,哇,很多代码,理解一下:

Init():是为了初始化各个变量的值。

 

图五

getAverageRating():获取平均评分,即现在真实用户对于该商品的评分的总值除以真实用户的评分数量。

 

selectTarget():顾名思义就是选择目标用户,怎么选的,看看代码

首先给item的键排个序,然后进入循环,循环的第一步是随机取一个数赋给target变量,如果这个target满足一下四个条件:选到的target对应的itemprofile小于maxcount,大于mincount,循环中之前并没有选到这个target,平均值小于threshold。

(为什么需要满足这四个条件,其实我也不清楚,再想想)

 

最后打印出来选择出的目标用户。

 

getFillerItems():获取装填项目

图六

这里也看了我一段时间,解释一下,首先获得装填项目的大小赋给mu,sigma不多说了,

然后利用获取符合正太分布的随机数的方法获取装填项目的数量,然后随机获取装填项目转为list形式。

(这里最难理解的是,为什么要有取正太分布这样的动作,难以理解。)

 

InsertSpam():    这个就是看我们选择的是什么攻击了,我们拿平均攻击来举例,攻击的其他方式可以看我的托攻击检测学习日记(一),从学习日记(一)我们可以知道平均攻击其实就是往装填项目里面添加平均评分。(这里是看的评分攻击,明天再看关系攻击了。)

 

图七

(马上产生了一个疑问,startid这个变量有什么用?)

这里可以看出,startUserID就是代表着user评分的数量,然后进入for循环,循环次数为评分数量*攻击范围的大小。

然后就是对装填项目注入平均评分

还有就是对目标用户注入我们想要给的评分

 

loadTarget():获取数据集

 

generateLabels():给虚假用户和真实用户打上标记,真实为0,虚假为1

 

generateProfiles():将虚假的和真实的都写入profiles

 

图八

 

看到这里,其实我们还是没有解决一个问题,那就是为什么会出现这么多次选择目标用户?再探究一波?

 

啊,其实这个时候是我笨了,发现调用的是

于是打开HybridAttack.py

图九

发现他调用了三个攻击。为了检验一下,将HybridAttack改为AverageAttack。运行一下,果然,最后的结果只出现了一次。

 

 图十

总结下来,今天遇到的问题还有三个没解决,一旦解决,我会在评论里面回复。

1.    为什么需要满足这四个条件?(selecttarget)

2.    为什么要使用正态分布取随机数?(getFillerItems)

3.    StartID有什么意义呢?(insertSpam)

 

除了这三个问题,我们其实还没有去看关于关系注入的攻击和混合注入的攻击,没关系,饭一口一口吃,代码一行一行看,我们之后再看!

 

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值