basfan 发表于 2020-7-10 09:19

一个简陋的监控文件夹内容变化的python小程序

本帖最后由 basfan 于 2020-7-10 09:21 编辑

因为以前有所管理的网站被黑经历,所以现在管理网站战战兢兢,总害怕被黑,网页内容被篡改,而用第三方工具又不放心,所以自己写了一个小程序,监控网站目录文件夹,看看有没有文件或上的变化,比较简陋,供大家参考。

顺便问一下各位高手,有没有好的文件比对方法?谢谢!



import os,pickle,operator

class Mypickle:

    def __init__(self, path, file):
      self.path=path
      self.file=file

      
    def getsave(self):
      oldlist=[]
      if os.path.isfile(self.file) and os.path.getsize(self.file)>0:
            with open (self.file,'rb') as f:
            oldlist=pickle.load(f)
      return oldlist


    def getdata(self):
      list=[]
      for path,folder,file in os.walk(self.path):
            for i in range(len(file)):
                size=str(os.path.getsize(os.path.join(path,file)))
                list.append(+size])
      return list



    def savedata(self,data):
      with open(self.file,'wb+') as f:
            pickle.dump(data,f)


    def comparison(self,data1,data2):
      list3=[]
      for i in range(len(data1)):
            if data1 not in data2:
                list3.append(data1)
      
      return list3



if __name__ == '__main__':
    path='D:\www'
    file=r'C:\Users\Administrator\Desktop\data.pickle'
    tmp2=[]
    tmp1=[]
    dif={}
   
    a=Mypickle(path,file)

    tmp2=a.getdata()

    if os.path.isfile(file):
      tmp1=a.getsave()

    if tmp1 is None or len(tmp1)==0:
      print('第一次运行,存储当前路径下所有文件名和文件大小:')
      a.savedata(tmp2)

    if tmp1 is not None and len(tmp1)>0:
      if operator.ne(tmp1,tmp2):
            dif=a.comparison(tmp1,tmp2)
            print('有变化的文件:',dif)
      else:
            print('未发现有变化文件')


下面是程序源代码,在python3.8.3上调试通过

sheyong 发表于 2020-7-10 09:45

666第一名   学习了

basfan 发表于 2020-7-10 09:59

sheyong 发表于 2020-7-10 09:45
666第一名   学习了

这个好用不好用,关键取决于文件比对和比对结果的记录,在我个人看,文件比对这块我没做成功,只能实现基本功能。

只要代码被增删任何地方,文件大小就会发生改变,所以这个实现原理是以字节为单位记录每个文件大小存储到一个list里面,然后对比以前的list和现在的list,找不同,列出来。

同时因为这个程序是在服务器端执行,除非对方拿到了系统权限,并成功黑了进来。否则服务器端执行的代码,他们看不到。

我后面想的是把这个程序作成日志,就是每天如果有变化则记录到文件,没有变化就不做记录,跟iis日志结合方便调取系统日志,查看网站被攻击原因(代码层面)。

Voyage 发表于 2020-7-10 10:25

起始只是比较文件大小的话并不能保证内容是否被篡改把,有可能改了文件大小没有发生变化。建议使用md5

basfan 发表于 2020-7-10 10:31

Voyage 发表于 2020-7-10 10:25
起始只是比较文件大小的话并不能保证内容是否被篡改把,有可能改了文件大小没有发生变化。建议使用md5

确实不能,只能基于某一时期的版本而言后面未篡改,所以特定时期特定版本很重要。

用md5还需要用第三方库,一开始确实这么想了,后来我觉得,服务器端东西,能少装就少装了,不知道是不是我这个思想作怪。再说网站一旦被入侵,代码层面肯定会被篡改以确保实现更多功能(譬如在某个页面添加调用,或者上传另外一套文件管理系统来访问所有文件),只要能检测出来文件存在变化和文件内容变化,我觉得也可以达到安全目的。因此就没用md5,但从理论上讲,确实md5比较高大上些

boxer 发表于 2020-7-10 11:07

windows的话,有相关的API,很方便

basfan 发表于 2020-7-10 18:06

boxer 发表于 2020-7-10 11:07
windows的话,有相关的API,很方便

譬如?如果是按修改时间来判断,我觉得最不靠谱,因为现在好多黑客网站都有修改文件修改时间和访问时间的工具。。。。都已经属于基本技能了。。。如果系统自带的功能,能否告知?谢谢!!

boxer 发表于 2020-7-10 20:25

本帖最后由 boxer 于 2020-7-13 10:04 编辑

basfan 发表于 2020-7-10 18:06
譬如?如果是按修改时间来判断,我觉得最不靠谱,因为现在好多黑客网站都有修改文件修改时间和访问时间的 ...
是实时监控啊,一有变化马上通知,不需要判断
-------------------------------------------------
附件已删除

页: [1]
查看完整版本: 一个简陋的监控文件夹内容变化的python小程序