v2.5.2
Giriş yap

Php Güvenlik fonksiyonu

sefaaydin
391 defa görüntülendi ve 1 kişi tarafından değerlendirildi

Aşağıdaki kodu inceleyebilir misiniz? Sizce yazdığımız bu kod ile tam güvenlik sağlamış olur muyuz?
İşlemlerin yapıldığı dosyada en üste bu kodu yazıyoruz ve çalıştırıyoruz.
Güvenlikten geçerse işlem devam ediyor. Geçemezse hareket sonlanıyor.

Yorumlarsanız sevinirim.


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 {
            $input  = str_replace('"', "", $input);
            $input  = str_replace("'", "", $input);
            $input  = cleaninput($input);
            $output = htmlentities($input, ENT_QUOTES);
        }
        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'];
    
    $patterns = array(
        "union",
        "coockie",
        "concat",
        "alter",
        "table",
        "where",
        "exec",
        "shell",
        "wget",
        "**/",
        "/**",
        "0x3a",
        "null",
        "DR/**/OP/",
        "drop",
        "/*",
        "*/",
        "*",
        "--",
        ";",
        "||",
        "'",
        "' #",
        "or 1=1",
        "'1'='1",
        "BUN",
        "S@BUN",
        "char",
        "OR%",
        "`",
        "[",
        "]",
        "<",
        ">",
        "++",
        "script",
        "select",
        "1,1",
        "substring",
        "ascii",
        "sleep(",
        "&&",
        "insert",
        "between",
        "values",
        "truncate",
        "benchmark",
        "sql",
        "mysql",
        "%27",
        "%22",
        "(",
        ")",
        "<?",
        "<?php",
        "?>",
        "../",
        "/localhost",
        "127.0.0.1",
        "loopback",
        ":",
        "%0A",
        "%0D",
        "%3C",
        "%3E",
        "%00",
        "%2e%2e",
        "input_file",
        "execute",
        "mosconfig",
        "environ",
        "scanner",
        "path=.",
        "mod=.",
        "eval\(",
        "javascript:",
        "base64_",
        "boot.ini",
        "etc/passwd",
        "self/environ",
        "md5",
        "echo.*kae",
        "=%27$"
    );
    foreach ($patterns as $pattern) {
        if (strlen($query_string) > 255 OR strpos(strtolower($query_string), strtolower($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');
    else if(getenv('HTTP_X_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
    else if(getenv('HTTP_X_FORWARDED'))
        $ipaddress = getenv('HTTP_X_FORWARDED');
    else if(getenv('HTTP_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_FORWARDED_FOR');
    else if(getenv('HTTP_FORWARDED'))
    $ipaddress = getenv('HTTP_FORWARDED');
    else if(getenv('REMOTE_ADDR'))
        $ipaddress = getenv('REMOTE_ADDR');
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}

executeSecurity();

Cevap yaz
Cevaplar (3)
hakankorkz
324 gün önce

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();

hakankorkz
290 gün önce

elbette sağlanabilir fakat bunun için fonksiyonların sürüm notlarını kontrol ediniz örneğin file_put_contents fonksiyonu php5 ve üzerinden itibaren geçerli gibi

sefaaydin
323 gün önce

Düzeltme için teşekkürler.
Gördüğüm kadarıyla PHP 8.1 için 2 satırda değişiklik var.
Yazdığınız kodu PHP 7 ve üzeri sürümlerde kullanım sağlayamaz mıyım?
Yani illa ki aşağıdaki satırlar için PHP 8.1 ve üzeri sürüm mü gerekiyor?

// Değişiklik: ENT_HTML5 flag'i eklendi
$output = htmlentities($input, ENT_QUOTES | ENT_HTML5);

// Değişiklik: strlen yerine mb_strlen kullanıldı
if (mb_strlen($query_string) > 255 || stripos($query_string, $pattern) !== false) {