file – DijitalTurk https://dijitalturk.com/veysel Dijital Paylaşımlar Mon, 22 Mar 2021 10:20:51 +0000 tr hourly 1 https://wordpress.org/?v=6.7.1 https://dijitalturk.com/veysel/wp-content/uploads/2024/12/favicon-32x32-1.png file – DijitalTurk https://dijitalturk.com/veysel 32 32 Python ile dosya kontrolü scripti https://dijitalturk.com/veysel/python-ile-dosya-kontrolu-scripti/ https://dijitalturk.com/veysel/python-ile-dosya-kontrolu-scripti/#respond Fri, 19 Mar 2021 14:46:02 +0000 http://dijitalturk.com/veysel/?p=1492 Web sitenize dosya yükleme işlemi yaptırıyorsunuz diyelim. Tüm kontrolleri de sağladınız ama gözden kaçırdığınız bir güvenlik açığı oldu ve sitenize […]

The post Python ile dosya kontrolü scripti appeared first on DijitalTurk.

]]>
Web sitenize dosya yükleme işlemi yaptırıyorsunuz diyelim. Tüm kontrolleri de sağladınız ama gözden kaçırdığınız bir güvenlik açığı oldu ve sitenize istenmeyen bir dosya yüklendi bunu nasıl yakalarsınız?

Bunun gibi can sıkıcı bir durumla karşılaştığınızda aşağıda örneğini paylaştığım Python Script’i ile güvenliğinizi arttırabilirsiniz.

Kodu paylaşmadan önce çalışma prensibini anlatayım.

Kod çalıştığı anda bulunduğu klasöre 3 adet dosya yaratacaktır.

"dosya_beyazliste.txt" 
Tarama esnasında görmezden gelinecek dosya isimleri Ör: index.php, upload.php
"uzanti_beyazliste.txt"
Tarama esnasında görmezden gelinecek dosya uzantıları Ör: png,jpg,gif
"log.txt"
Tarama sonucunun çıktıları.

Script içerisinde de bazı parametreleri ayarlamanız gerekecek aşağıda onları anlatacağım.

yol = "./dosyaKontrol/"

Scriptin çalışacağı klasör, eğer bulunduğu dizinde çalıştırmak isterseniz “./” olarak ayarlayabilirsiniz.

karantinaKlasoru = "../k/" #scriptin çalıştığı klasörde olmaması önerilir. en azından bir üst klasörde olmalı.

Tehdit olarak bulunan dosyaların taşınacağı karantina klasörü.

wlFileName = "dosya_beyazliste.txt"
wlExFileName = "uzanti_beyazliste.txt"
logFileName = "log.txt"

Bunları zaten yukarıda anlattım 🙂

karantinaGonder = 'h' #[ e | h ]

Tehdit olarak bulunan dosyaları karantina klasörü olarak belirlediğiniz klasöre taşınması onayı. Scripti ilk çalıştırdığınızda “h” olarak kalmasında fayda var. Sonrasında log.txt ye bakıp hariç tutacağınız uzantı ve “dosyaları dosya_beyazliste.txt” ve “uzanti_beyazliste.txt” ye ekledikten sonra “e” olarak işaretleyin. (unutmayın küçük harf e veya h)

 

Bu arada Python Script’i yükledikten sonra klasör yetkilerinin “0744” de olması gerektiğini de hatırlatmak isterim. Bu scripti ister bir PHP upload işlemi sonrasına yada bir ChronJob işlemine bağlayarak periodik olarak yapabilirsiniz.

Ekran görüntülerini de paylaşıyorum. İlk ekran görüntüsü Python script’in PHP içerisinden çağırılmasının çıktısıdır.

Python script çalıştıktan sonra log.txt çıktısı.

Script dosyasını yüklediğiniz klasörün durumu

Tehdit olarak algılanan dosyanın karantinaya taşındığı durum.

“dosya_beyazliste.txt” ve  “uzanti_beyazliste.txt” nizin yaklaşık olarak olması gereken içeriği

Bir yerlerde paylaşırsanız ya da Python scripti kullanırsanız yada sırf emeğe saygı için kaynak belirtmenizi rica ederim 🙂

DijitalTurk.com | File Control

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import shutil
from datetime import datetime

#DijitalTurk.com

now = datetime.now()
 #print("now =", now)
# dd/mm/YY H:M:S
dt_string = now.strftime("%d/%m/%Y %H:%M:%S")
#print("date and time =", dt_string)



#yol = "./"
yol = "./dosyaKontrol/"
karantinaKlasoru = "../k/" #scriptin çalıştığı klasörde olmaması önerilir. en azından bir üst klasörde olmalı.
wlFileName = "dosya_beyazliste.txt"
wlExFileName = "uzanti_beyazliste.txt"
logFileName = "log.txt"

karantinaGonder = 'h' #[ e | h ]

warnMsg = ' [KONTROL] '
warnCreateFile = ' dosyası oluşturuldu [SİSTEM] '
myNameIs = 'DosyaKontrolV2.py'

karantinaYol = yol+karantinaKlasoru
whiteListFile = yol+wlFileName
whiteListExtention = yol+wlExFileName
logFile = yol+logFileName
tarananDosyaSayisi = 0

logList = []
fileNameWhiteList = []
fileExtentionWhiteList = []
allList = os.listdir(yol)

#print("**** allList ****")
#print(allList)
print("\n -------- START --------- \n")

if not os.path.isdir(karantinaYol):
    os.mkdir(karantinaYol)



if os.path.isfile(whiteListExtention):
    f1 = open(whiteListExtention, "r")
    fileExtentionWhiteList = f1.readlines()
    f1.close()
else:
    print(whiteListExtention + warnCreateFile)
    f1 = open(whiteListExtention, "w")

if os.path.isfile(whiteListFile):
    f2 = open(whiteListFile, "r")
    fileNameWhiteList = f2.readlines()
    f2.close()
else:
    print(whiteListFile + warnCreateFile)
    f2 = open(whiteListFile, "w")

fileNameWhiteList.append(whiteListExtention)
fileNameWhiteList.append(whiteListFile)
fileNameWhiteList.append(myNameIs)
fileNameWhiteList.append(wlFileName)
fileNameWhiteList.append(wlExFileName)
fileNameWhiteList.append(logFileName)

new_fileNameWhiteList = [s.replace('\r\n', '') for s in fileNameWhiteList]
new_fileExtentionWhiteList = [s.replace('\r\n', '') for s in fileExtentionWhiteList]

print("\n **** Dikkate alınmayan dosya ve uzantılar**** \n")
print(new_fileExtentionWhiteList)
print(new_fileNameWhiteList)
print("\n ----------------- \n")


def isDeleteFile(root,fileName):
    if fileName.split('.')[-1].lower() not in new_fileExtentionWhiteList:
              if fileName not in new_fileNameWhiteList:
                logList.append( warnMsg + root + fileName)
                print( warnMsg  + root  + fileName)
                if karantinaGonder == 'e':
                    shutil.move(root + fileName, karantinaYol + fileName + "_sec")

for root, dirs, file in os.walk(yol):
      for fileName in file:
        tarananDosyaSayisi = tarananDosyaSayisi+1
        isDeleteFile(root , fileName)

forLog = open(logFile,"w")#KONTROL ET
#forLog.write("Now the file has more content!")
#print(logList)
forLog.write('\n Zaman: ' + dt_string + ' \n  Toplam taranan dosya sayısı: ' + str( tarananDosyaSayisi ) + ' \n Kontrol edilmesi gereken dosya sayısı: ' +  str( len(logList) )+ '\n')
for l in logList:
    forLog.write(l + '\n')
    #forLog.write(" ".join(l) + "\n")
    #print(l)
forLog.close()


print( '\n Zaman: ' + dt_string + ' Toplam taranan dosya sayısı: ' + str( tarananDosyaSayisi ) + ' Kontrol edilmesi gereken dosya sayısı: ' +  str( len(logList) ) )

 

The post Python ile dosya kontrolü scripti appeared first on DijitalTurk.

]]>
https://dijitalturk.com/veysel/python-ile-dosya-kontrolu-scripti/feed/ 0