yukarı da ki kodunuz 5 sürümleri ile çalışacaksanız gayet sağlıklı fakat en önemli güvenlik bence daima bir teknoloji de yeni proje ye başlarken güncel versiyonda başlatmak olmalı derim vesselam işin özü php 8.1 ve üstü versiyonlar da uyumlu hale getirdim ve yapmış olduğum değişiklik güncelleme vs durumlarını yorum satırları ile aşağı da belirtim
function cleaninput($input) {
$search = array(
'@<script[^>]*?>.*?</script>@si', // Strip out javascript
'@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags
'@<style[^>]*?>.*?</style>@siU', // Strip style tags properly
'@<![\s\S]*?--[ \t\n\r]*>@' // Strip multi-line comments
);
$output = preg_replace($search, '', $input);
return $output;
}
function sanitize($input) {
if (is_array($input)) {
foreach ($input as $var => $val) {
$output[$var] = sanitize($val);
}
} else {
// Değişiklik: Çift tırnak ve tek tırnakları aynı anda kaldırmak için str_replace güncellendi
$input = str_replace(['"', "'"], '', $input);
$input = cleaninput($input);
// Değişiklik: ENT_HTML5 flag'i eklendi
$output = htmlentities($input, ENT_QUOTES | ENT_HTML5);
}
return @$output;
}
function executeSecurity() {
$_POST = sanitize($_POST);
$_GET = sanitize($_GET);
$_REQUEST = sanitize($_REQUEST);
$_COOKIE = sanitize($_COOKIE);
if (isset($_SESSION)) {
$_SESSION = sanitize($_SESSION);
}
$request_uri = $_SERVER['REQUEST_URI'];
$query_string = $_SERVER['QUERY_STRING'];
// Değişiklik: patterns dizisi yorum satırları eklenerek güncellendi
$patterns = array(
"union", // Güncelleme: Union sorgularını engelleme
"coockie", // Eksik: Doğru yazım "cookie" olmalı
"concat", // Güncelleme: Concat sorgularını engelleme
"alter", // Güncelleme: Alter sorgularını engelleme
"table", // Güncelleme: Table sorgularını engelleme
"where", // Güncelleme: Where sorgularını engelleme
"exec", // Güncelleme: Exec sorgularını engelleme
"shell", // Güncelleme: Shell sorgularını engelleme
"wget", // Güncelleme: Wget sorgularını engelleme
"**/", // Güncelleme: Özel karakterleri engelleme
"/**", // Güncelleme: Özel karakterleri engelleme
"0x3a", // Güncelleme: Özel karakterleri engelleme
"null", // Güncelleme: Null sorgularını engelleme
"DR/**/OP/", // Güncelleme: Özel karakterleri engelleme
"drop", // Güncelleme: Drop sorgularını engelleme
"/*", // Güncelleme: Özel karakterleri engelleme
"*/", // Güncelleme: Özel karakterleri engelleme
"*", // Güncelleme: Özel karakterleri engelleme
"--", // Güncelleme: Özel karakterleri engelleme
";", // Güncelleme: Özel karakterleri engelleme
"||", // Güncelleme: Özel karakterleri engelleme
"'", // Güncelleme: Özel karakterleri engelleme
"' #", // Güncelleme: Özel karakterleri engelleme
"or 1=1", // Güncelleme: Özel karakterleri engelleme
"'1'='1", // Güncelleme: Özel karakterleri engelleme
"BUN", // Güncelleme: Özel karakterleri engelleme
"S@BUN", // Güncelleme: Özel karakterleri engelleme
"char", // Güncelleme: Char sorgularını engelleme
"OR%", // Güncelleme: Özel karakterleri engelleme
"`", // Güncelleme: Özel karakterleri engelleme
"[", // Güncelleme: Özel karakterleri engelleme
"]", // Güncelleme: Özel karakterleri engelleme
"<", // Güncelleme: Özel karakterleri engelleme
">", // Güncelleme: Özel karakterleri engelleme
"++", // Güncelleme: Özel karakterleri engelleme
"script", // Güncelleme: Script sorgularını engelleme
"select", // Güncelleme: Select sorgularını engelleme
"1,1", // Güncelleme: Özel karakterleri engelleme
"substring", // Güncelleme: Substring sorgularını engelleme
"ascii", // Güncelleme: Ascii sorgularını engelleme
"sleep(", // Güncelleme: Sleep sorgularını engelleme
"&&", // Güncelleme: Özel karakterleri engelleme
"insert", // Güncelleme: Insert sorgularını engelleme
"between", // Güncelleme: Between sorgularını engelleme
"values", // Güncelleme: Values sorgularını engelleme
"truncate", // Güncelleme: Truncate sorgularını engelleme
"benchmark", // Güncelleme: Benchmark sorgularını engelleme
"sql", // Güncelleme: Sql sorgularını engelleme
"mysql", // Güncelleme: Mysql sorgularını engelleme
"%27", // Güncelleme: Özel karakterleri engelleme
"%22", // Güncelleme: Özel karakterleri engelleme
"(", // Güncelleme: Özel karakterleri engelleme
")", // Güncelleme: Özel karakterleri engelleme
"<?", // Güncelleme: Özel karakterleri engelleme
"<?php", // Güncelleme: Özel karakterleri engelleme
"?>", // Güncelleme: Özel karakterleri engelleme
"../", // Güncelleme: Özel karakterleri engelleme
"/localhost",// Güncelleme: Özel karakterleri engelleme
"127.0.0.1", // Güncelleme: Özel karakterleri engelleme
"loopback", // Güncelleme: Özel karakterleri engelleme
":", // Güncelleme: Özel karakterleri engelleme
"%0A", // Güncelleme: Özel karakterleri engelleme
"%0D", // Güncelleme: Özel karakterleri engelleme
"%3C", // Güncelleme: Özel karakterleri engelleme
"%3E", // Güncelleme: Özel karakterleri engelleme
"%00", // Güncelleme: Özel karakterleri engelleme
"%2e%2e", // Güncelleme: Özel karakterleri engelleme
"input_file",// Güncelleme: Özel karakterleri engelleme
"execute", // Güncelleme: Execute sorgularını engelleme
"mosconfig", // Güncelleme: Mosconfig sorgularını engelleme
"environ", // Güncelleme: Environ sorgularını engelleme
"scanner", // Güncelleme: Scanner sorgularını engelleme
"path=.", // Güncelleme: Özel karakterleri engelleme
"mod=.", // Güncelleme: Özel karakterleri engelleme
"eval\(", // Güncelleme: Eval sorgularını engelleme
"javascript:", // Güncelleme: Javascript protokolünü engelleme
"base64_", // Güncelleme: Özel karakterleri engelleme
"boot.ini", // Güncelleme: Özel karakterleri engelleme
"etc/passwd",// Güncelleme: Özel karakterleri engelleme
"self/environ", // Güncelleme: Özel karakterleri engelleme
"md5", // Güncelleme: Md5 sorgularını engelleme
"echo.*kae", // Güncelleme: Özel karakterleri engelleme
"=%27$" // Güncelleme: Özel karakterleri engelleme
);
foreach ($patterns as $pattern) {
// Değişiklik: strlen yerine mb_strlen kullanıldı
if (mb_strlen($query_string) > 255 || stripos($query_string, $pattern) !== false) {
$activity = json_encode(['post' => $_POST, 'get' => $_GET, 'request' => $_REQUEST, 'url' => $_SERVER['REQUEST_URI'], 'IP' => hacker_ip(), 'time' => date('d-m-Y H:i:s')]);
$new_filename = date('d-m-Y') . "_" . 'suspicious_activity';
file_put_contents('logs/' . $new_filename . '.log', $activity, FILE_APPEND);
echo "IP RECORDED and ACTIVITY BLOCKED";
exit(1);
}
}
}
function hacker_ip() {
$ipaddress = '';
if (getenv('HTTP_CLIENT_IP')) {
$ipaddress = getenv('HTTP_CLIENT_IP');
} elseif (getenv('HTTP_X_FORWARDED_FOR')) {
$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
} elseif (getenv('HTTP_X_FORWARDED')) {
$ipaddress = getenv('HTTP_X_FORWARDED');
} elseif (getenv('HTTP_FORWARDED_FOR')) {
$ipaddress = getenv('HTTP_FORWARDED_FOR');
} elseif (getenv('HTTP_FORWARDED')) {
$ipaddress = getenv('HTTP_FORWARDED');
} elseif (getenv('REMOTE_ADDR')) {
$ipaddress = getenv('REMOTE_ADDR');
} else {
$ipaddress = 'UNKNOWN';
}
return $ipaddress;
}
executeSecurity();
anlık realtime işlemi için bunu öneririm https://pusher.com/ onun dışında zaten ana bilgisayarı projeksiyon yansıtması yapacağın için süre dolana kadar ana ekran da boş sayfa göstertirsin sonuçlar pusher ile anlık güncelleyeceğin için istediğin soncu elde edersin
inner join yapısını araştırabilirsiniz efendim
tablonuzu zaten oluşturmuşsunuz beyfendi muhtemelen chat-gpt den yardımla yazılmış bir kod bu belli ki yine aynı prompt ta bunun mysql bağlanımını da yazdırabilirsiniz...
https://rapidapi.com/tr da pek çok api bulunuyor bir inceleyin isterseniz...
Kesinlikle yanlış kullanım olacaktır bu durum google de spama düşebilir siteniz...
ilk denemese bunca yıllık deneyimime dayanarak söylğüyorum sende büyük ışık var ama şayet piyasade uzun süredir tecrübeli biriysen de çok süoer iş çıkarmışsın..
// Veritabanındaki "editing" durumunu sorgula
$stmt = $db->prepare("SELECT * FROM editing_status WHERE page_id = :page_id");
$stmt->bindParam(':page_id', $page_id);
$stmt->execute();
$editing_status = $stmt->fetch(PDO::FETCH_ASSOC);
// Eğer sayfa düzenleniyorsa, kullanıcıyı uyar ve çıkış yap
if ($editing_status && $editing_status['user_id'] != $_SESSION['user_id']) {
echo "Bu sayfa şu anda başkası tarafından düzenleniyor. Lütfen daha sonra tekrar deneyin.";
exit;
}
// Sayfa düzenlenmiyorsa, "editing" durumunu kaydet
$stmt = $db->prepare("REPLACE INTO editing_status (page_id, user_id) VALUES (:page_id, :user_id)");
$stmt->bindParam(':page_id', $page_id);
$stmt->bindParam(':user_id', $_SESSION['user_id']);
$stmt->execute();
// Sayfayı göster
echo "Sayfa düzenlenebilir.";
// "editing" durumunu kaldır
$stmt = $db->prepare("DELETE FROM editing_status WHERE page_id = :page_id AND user_id = :user_id");
$stmt->bindParam(':page_id', $page_id);
$stmt->bindParam(':user_id', $_SESSION['user_id']);
$stmt->execute();
// Session'ı sonlandır
session_destroy();
// Sayfayı yönlendir
header("Location: index.php");
exit;
buna ek olarak tabloya bir de süre koyarsın kullanıcı aniden terk edebilir sayfayı ortalama 1 saat geçtiyse durumu siler false felan çekersin
dostum evet zaten ekli ama yine de tailwind görmüyor
<?php
function kelimeAyir($kelime) {
// Kelime hecelere ayrılıyor
$heceler = hecele($kelime);
// Son hece alınıyor (birinci çekim eki burada yer alır)
$son_hece = array_pop($heceler);
// İlk hece alınıyor (fiil kökü burada yer alır)
$ilk_hece = array_shift($heceler);
// Fiil kökü tespit ediliyor
$fiil_koku = fiilKoku($ilk_hece);
// Fiil yapım eki tespit ediliyor (birinci çekim eki dahil ediliyor)
$fiil_yapim_eki = substr($son_hece, 0, -2);
// Kişi ekleri tespit ediliyor
$kişi_eki = substr($son_hece, -2);
// Çıktıya eklenen değerler için bir dizi oluşturuluyor
$cikti = array(
'= ' . $fiil_koku . ' -> fiil kökü',
'= ' . $fiil_yapim_eki . ' -> fiil yapım eki',
'= ' . $kişi_eki . ' -> kişi eki'
);
// Çıktı dizesi oluşturuluyor
$cikti_str = implode("\n", $cikti);
return $cikti_str;
}
function hecele($kelime) {
// Türkçe heceleme kurallarına göre kelime hecelerine ayrılıyor
// Bu örnekte basit bir algoritma kullanılmıştır, gerçek dilbilgisi kurallarını kullanabilirsiniz
$heceler = array();
$kelime_len = mb_strlen($kelime, 'utf-8');
for ($i=0; $i<$kelime_len; $i++) {
$hece = '';
if ($i < $kelime_len-1 && mb_substr($kelime, $i, 2, 'utf-8') == 'iy') {
$hece = mb_substr($kelime, $i, 2, 'utf-8');
$i++;
} else {
$hece = mb_substr($kelime, $i, 1, 'utf-8');
}
$heceler[] = $hece;
}
return $heceler;
}
function fiilKoku($hece) {
// Fiil kökü tespiti için Türkçe dilbilgisi kurallarına göre işlem yapılıyor
// Bu örnekte sadece son hecenin son harfi kontrol edilerek fiil kökü belirleniyor
$son_harf = mb_substr($hece, -1, 1, 'utf-8');
if (in_array($son_harf, array('a', 'e', 'ı', 'i', 'o', 'ö', 'u', 'ü'))) {
return mb_substr($hece, 0, -1, 'utf-8');
} else {
return $hece;
}
}