kodumda herhangi bir yanlışlık düzeltmem gereken bir yer yada güvenlik açığı mevcutmu bakabilirmisiniz
`package main
// not ip adresi blackliste eklendi diyelim
// ip adresini blacklist'den çıkardıktan sonra tekrar log.json dosyasına eklemedim gereksiz olucağını ve zaman kaybı olacağını düşündüm
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"strconv"
"strings"
"time"
)
var ( // değişkenlere heryerden ulaşmak için main fonksiyonu dışında tanımladık
ip_tekrarları []byte
blacklist []byte
ekle bool
)
func main() {
ip_tekrarları, _ = ioutil.ReadFile("log.json")
blacklist, _ = ioutil.ReadFile("blacklist.json")
ip_adresi := "333.9.9.91" // siteden parametre olarak aldığımız ip adresini buraya yazıcaz
durum := ip_kontrol(ip_adresi)
if durum { // ip adresi sahte ise devam etmiycez
devam_dur := ip_geçmişi("log.json", ip_adresi)
fmt.Println(devam_dur)
return
}
fmt.Println(durum)
}
func ip_geçmişi(file_path string, ip string) interface{} {
ip_adresi, zaman := ip_json_dosyasında_varmı(blacklist, ip)
if ip_adresi == "mevcut değil" { // blacklist içinde mevcut değilse ip adresine ekleme işlemi yapıcaz
ekle = true
} else {
if süre_kontrol(zaman.(string)) { // 5 dakika geçti ise true döner
// ip adresi devam edebilir
var data map[string]interface{}
err := json.Unmarshal(blacklist, &data)
if err != nil {
log.Fatal(err)
}
delete(data, ip)
içerik_değiştir("blacklist.json", data)
return true // ip adresi ile işleme devam edebilir
} else {
return false // ip adresi işleme devam edemez
}
}
if ekle {
if len(ip_tekrarları) == 0 || string(ip_tekrarları) == "{}" { // dosya boşmu
data := make(map[string]int)
data[ip] = 1
güncelData, err := json.MarshalIndent(data, "", " ")
if err != nil {
log.Fatal(err)
}
err = ioutil.WriteFile("log.json", güncelData, 0644)
if err != nil {
log.Fatal(err)
}
return true // ip devam edebilir
} else { // dosya boş değilse
var data map[string]int
err := json.Unmarshal(ip_tekrarları, &data)
if err != nil {
log.Fatal(err)
}
_, varmı := data[ip] // ip adresi dosyada mevcutmu bunu kontrol ediyoruz
if !varmı { // ip adresi dosyada mevcut değilse
var data map[string]int
err := json.Unmarshal(ip_tekrarları, &data)
if err != nil {
log.Fatal(err)
}
data[ip] = 1
içerik_değiştir("log.json", data)
return true
}
if data[ip] >= 0 && data[ip] <= 4 {
data[ip] += 1
içerik_değiştir(file_path, data)
return true
} else {
// ip adresinin işleme devam etmesine izin vermiycez
delete(data, ip)
içerik_değiştir(file_path, data)
// blacklist ekleme işlemi
if len(blacklist) == 0 || string(blacklist) == "{}" { // dosya boşsa
now := time.Now()
düzgün_zaman := now.Format("2006-01-02 15:04:05")
var respBytes = []byte(fmt.Sprintf(`{"%s": "%s"}`, ip, düzgün_zaman))
a := ioutil.WriteFile("blacklist.json", respBytes, 0644)
if a != nil {
log.Fatal(a)
}
} else {
now := time.Now()
düzgün_zaman := now.Format("2006-01-02 15:04:05")
var data map[string]interface{}
err := json.Unmarshal(blacklist, &data)
if err != nil {
log.Fatal(err)
}
data[ip] = düzgün_zaman
içerik_değiştir("blacklist.json", data)
}
return false
}
}
}
return ""
}
func içerik_değiştir(file_path string, data interface{}) {
newData, err := json.MarshalIndent(data, "", " ")
if err != nil {
log.Fatal(err)
}
durum := ioutil.WriteFile(file_path, newData, 0644)
if durum != nil {
log.Fatal(durum)
}
}
func ip_json_dosyasında_varmı(file []byte, ip string) (string, interface{}) {
if len(file) == 0 || string(file) == "{}" {
return "mevcut değil", nil
}
var data map[string]interface{}
err := json.Unmarshal(file, &data)
if err != nil {
log.Fatal(err)
}
value, found := data[ip]
if !found {
return "mevcut değil", nil
}
return ip, value
}
func ip_kontrol(ip string) bool { // ip adresi beklenenden farklı bir formatda ise engelliyoruz
a := strings.Split(ip, ".")
for _, value := range a {
_, err := strconv.ParseFloat(value, 64)
if err != nil {
fmt.Printf("ip adresi geçersiz ip adresi engellendi ----> %s\n", ip)
return false
}
}
if len(a) != 4 {
fmt.Printf("ip adresi geçersiz ip adresi engellendi ----> %s\n", ip)
return false
}
return true
}
func süre_kontrol(eski_zaman string) bool { // şuanki zaman ile eski zaman arasında 5 dakika geçti ise true değerini döndürücez
layout := "2006-01-02 15:04:05"
now := time.Now()
şuanki_zaman := now.Format(layout)
eski, _ := time.Parse(layout, eski_zaman)
yeni, _ := time.Parse(layout, şuanki_zaman)
geçenSüre := yeni.Sub(eski)
dakika := geçenSüre.Minutes()
if dakika > 5 {
return true
} else {
return false
}
}
`