[Dev] Anti SQL for all webs

Status
Not open for further replies.

dota-sdso

Well-Known Member
Joined
Apr 30, 2014
Messages
590
Reaction score
822
Здравейте,
От доста време се каня да си оправя anti-sql защитата на сайта и вчера се хванах. Защита е стара и за никой не е нещо ново. Аз съм я виждал в много различни уебове. Не е ясно самата защита доколко е читава, поне аз не мога да кажа, защото не разбирам и не мога да я анализирам в детайли. Според мен със сигурност спира по елементарните опити за инжекция. Така или иначе, аз я харесах, защото си имаше опция за записване в базата на логове. Но при мен не работеше, както трябва.. показваше грешно айпи при опит за инжекция и часът го показваше с някакви си цифри, които аз не разбирам или поне ми беше сложно да ги разбера, все едно 14062014110055 - което примерно трябва да значи 14.06.2014 еди колко си часа. Та както и да е.
Аз реших да се хвана и с моите дебилни познания да си оправя датите да ми ги показва прилично, да ми показва реалното айпи и проверка за прокси, вид браузър и вид операционна система. И това модулче да си го пусна в админ панела на Дамян, за да си гледам логовете през панела. Не съм дизайнер, но се постарах да го направя модула така, че да е съвместим с всички уебове. Добавил съм стил в таблицата, и можете да си го едитвате според вашите нужди без да се налага да импортвате външен клас. Реших да споделя файловете с тези, които имат нужда от тях. Предполагам, че все на някой ще му свършат работа. Не знам кой е авторът на оригиналният модул, но изказвам благодарност към него и предполагам, че няма нищо против, че съм го едитнал. Той при мен така или иначе не работеше читаво.
Може да си добавите в самият скрипт да прави автоматична таблица в базата аз не съм го направил, защото не му разбирам. Аз си правих моята на ръка.

Ето я защитката
PHP:
<?php
function getBrowser() 
{ 
    $u_agent = $_SERVER['HTTP_USER_AGENT']; 
    $bname = 'Unknown';
    $platform = 'Unknown';
    $version= "";

 
    if (preg_match('/linux/i', $u_agent)) {
        $platform = 'Linux';
    }
    elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
        $platform = 'Mac';
    }
    elseif (preg_match('/windows|win32/i', $u_agent)) {
        $platform = 'Windows';
    }
    

    if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent)) 
    { 
        $bname = 'Internet Explorer'; 
        $ub = "MSIE"; 
    } 
    elseif(preg_match('/Firefox/i',$u_agent)) 
    { 
        $bname = 'Mozilla Firefox'; 
        $ub = "Firefox"; 
    } 
    elseif(preg_match('/Chrome/i',$u_agent)) 
    { 
        $bname = 'Google Chrome'; 
        $ub = "Chrome"; 
    } 
    elseif(preg_match('/Safari/i',$u_agent)) 
    { 
        $bname = 'Apple Safari'; 
        $ub = "Safari"; 
    } 
    elseif(preg_match('/Opera/i',$u_agent)) 
    { 
        $bname = 'Opera'; 
        $ub = "Opera"; 
    } 
    elseif(preg_match('/Netscape/i',$u_agent)) 
    { 
        $bname = 'Netscape'; 
        $ub = "Netscape"; 
    } 
    

    $known = array('Version', $ub, 'other');
    $pattern = '#(?<browser>' . join('|', $known) .
    ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
    if (!preg_match_all($pattern, $u_agent, $matches)) {

    }
    

    $i = count($matches['browser']);
    if ($i != 1) {

        if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
            $version= $matches['version'][0];
        }
        else {
            $version= $matches['version'][1];
        }
    }
    else {
        $version= $matches['version'][0];
    }
    

    if ($version==null || $version=="") {$version="?";}
    
    return array(
        'userAgent' => $u_agent,
        'name'      => $bname,
        'version'   => $version,
        'platform'  => $platform,
        'pattern'    => $pattern
    );
} 


?>
<?php
session_start();
$ip = $_SERVER['REMOTE_ADDR'];
if ( isset($_SERVER['HTTP_CLIENT_IP']) && ! empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif ( isset($_SERVER['HTTP_X_FORWARDED_FOR']) && ! empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = (isset($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : '0.0.0.0';
}

$ip = filter_var($ip, FILTER_VALIDATE_IP);
$ip = ($ip === false) ? '0.0.0.0' : $ip;
$beforepage = $_SERVER['QUERY_STRING'];
$agent=getBrowser();
$browser= $agent['name'];
$os=$agent['platform'];





$time = date("Y-m-d H:i:s");
foreach ($_GET as $value)
{
    if ($value == true)
    {

        if (eregi("'", htmlspecialchars($value)))
        {
            echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected \"'\" </br><font color='green'> The log file has been successful saved!</font><b>" . $value .
                "</b>";
            $value = str_replace("'", "kavichka", $value);
            $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
            die();
        }

        if (eregi("\"", htmlspecialchars($value)))
        {
            echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected \"\"\" </br><font color='green'> The log file has been successful saved!</font><b>" . $value .
                "</b>";

            $value = str_replace("DROP", "D R O P", $value);
            $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
            die();
        }

        if (eregi("DROP", htmlspecialchars($value)))
        {
            echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected \"DROP\" </br><font color='green'> The log file has been successful saved!</font><b>" .
                $value . "</b>";
            $value = str_replace("DROP", "D R O P", $value);
            $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
            die();
        }

        if (eregi("SHUTDOWN", htmlspecialchars($value)))
        {
            echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected\"SHUTDOWN\" </br><font color='green'> The log file has been successful saved!</font><b>" .
                $value . "</b>";
            $value = str_replace("SHUTDOWN", "S H U T D O W N", $value);
            $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
            die();
        }


        if (eregi(";", htmlspecialchars($value)))
        {
            echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected \";\" </br><font color='green'> The log file has been successful saved!</font><b>" . $value .
                "</b>";

            $value = str_replace("DROP", "D R O P", $value);
            $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
            die();
        }

        if (eregi("SELECT", htmlspecialchars($value)))
        {
            echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected \"SELECT\" </br><font color='green'> The log file has been successful saved!</font><b>" .
                $value . "</b>";

            $value = str_replace("SELECT", "S E L E C T", $value);
            $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
            die();
        }


        foreach ($_POST as $value)
        {
            if (eregi("'", htmlspecialchars($value)))
            {
                echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected \"'\" </br><font color='green'> The log file has been successful saved!</font><b>" . $value .
                    "</b>";
                $value = str_replace("'", "kavichka", $value);
                $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
                die();
            }

            if (eregi("\"", htmlspecialchars($value)))
            {
                echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected \"\"\" </br><font color='green'> The log file has been successful saved!</font><b>" . $value .
                    "</b>";
                $value = str_replace("DROP", "D R O P", $value);
                $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
                die();
            }

            if (eregi("DROP", htmlspecialchars($value)))
            {
                echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected\"DROP\" </br><font color='green'> The log file has been successful saved!</font><b>" .
                    $value . "</b>";
                $value = str_replace("DROP", "D R O P", $value);
                $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
                die();
            }

            if (eregi(";", htmlspecialchars($value)))
            {
                echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected \";\" </br><font color='green'> The log file has been successful saved!</font><b>" . $value .
                    "</b>";
                $value = str_replace("DROP", "D R O P", $value);
                $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
                die();
            }

            if (eregi("SELECT", htmlspecialchars($value)))
            {
                echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected\"SELECT\" </br><font color='green'> The log file has been successful saved!</font><b>" .
                    $value . "</b>";
                $value = str_replace("SELECT", "S E L E C T", $value);
                $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
                die();
            }
        }
    }
    else
    {
        echo "";
    }
}

foreach ($_POST as $value)
{
    if ($value == true)
    {

        if (eregi("'", htmlspecialchars($value)))
        {
            echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected\"'\" </br><font color='green'> The log file has been successful saved!</font><b>" . $value .
                "</b>";
            $value = str_replace("'", "kavichka", $value);
            $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
            die();
        }

        if (eregi("\"", htmlspecialchars($value)))
        {
            echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected\"\"\" </br><font color='green'> The log file has been successful saved!</font><b>" . $value .
                "</b>";

            $value = str_replace("DROP", "D R O P", $value);
            $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
            die();
        }

        if (eregi("SHUTDOWN", htmlspecialchars($value)))
        {
            echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected \"SHUTDOWN\" </br><font color='green'> The log file has been successful saved!</font><b>" .
                $value . "</b>";
            $value = str_replace("SHUTDOWN", "S H U T D O W N", $value);
            $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
            die();
        }

        if (eregi("DROP", htmlspecialchars($value)))
        {
            echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected \"DROP\" </br><font color='green'> The log file has been successful saved!</font><b>" .
                $value . "</b>";
            $value = str_replace("DROP", "D R O P", $value);
            $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
            die();
        }

        if (eregi(";", htmlspecialchars($value)))
        {
            echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected\";\" </br><font color='green'> The log file has been successful saved!</font><b>" .$value .
                "</b>";

            $value = str_replace("DROP", "D R O P", $value);
            $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
            die();
        }

        if (eregi("SELECT", htmlspecialchars($value)))
        {
            echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected\"SELECT\" </br><font color='green'> The log file has been successful saved!</font><b>" .
                $value . "</b>";

            $value = str_replace("SELECT", "S E L E C T", $value);
            $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
            die();
        }


        foreach ($_POST as $value)
        {
            if (eregi("'", htmlspecialchars($value)))
            {
                echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected\"'\" </br><font color='green'> The log file has been successful saved!</font><b>" . $value .
                    "</b>";
                $value = str_replace("'", "kavichka", $value);
                $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
                die();
            }

            if (eregi("\"", htmlspecialchars($value)))
            {
                echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected \"\"\" </br><font color='green'> The log file has been successful saved!</font><b>" . $value .
                    "</b>";
                $value = str_replace("DROP", "D R O P", $value);
                $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os'");
                die();
            }

            if (eregi("DROP", htmlspecialchars($value)))
            {
                echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected \"DROP\" </br><font color='green'> The log file has been successful saved!</font><b>" .
                    $value . "</b>";
                $value = str_replace("DROP", "D R O P", $value);
                $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
                die();
            }

            if (eregi(";", htmlspecialchars($value)))
            {
                echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected \";\" </br><font color='green'> The log file has been successful saved!</font><b>" .
                    "</b>";
                $value = str_replace("DROP", "D R O P", $value);
                $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os'");
                die();
            }

            if (eregi("SELECT", htmlspecialchars($value)))
            {
                echo "<div align='center' style='color:red; font-size:25; padding: 100;'>SQL Injection detected\"SELECT\" </br><font color='green'> The log file has been successful saved!</font><b>" .
                    $value . "</b>";
                $value = str_replace("SELECT", "S E L E C T", $value);
                $insert = mssql_query("INSERT INTO antisqlinjection (tarikata, ip, komanda, chas, browser, os)
VALUES('$beforepage', '$ip', '$value', '$time', '$browser', '$os')");
                die();
            }
        }
    }
    else
    {
        echo "";
    }
}
?>


А ето го и модула за админ панел или където искате да си го сложите :)

PHP:
<SPAN align="center"STYLE="COLOR:green; font-SIZE:17px;" ><B>SQL INJECTIONS</B></FONT></SPAN>
	<?php
		$query = mssql_query("SELECT * from antisqlinjection order by chas desc;");


		   echo "
		   
		   </br></br></br>
		       
			   <div style='height:600px;overflow:auto;'>
			<table style='background-color:#222; border-color:#242415' width=600 colspan=0 cellpadding=0 border='1'>           
			  <tr style='background-color:#555555; position:fixed; left: 403; top:144; color:skyblue; font-size:16;'  align='center'>
                  <th rowspan='8' width='156'>Page</th>
                  <th width='51'>Date</th>
                  <th width='180'>Command</th>
                  <th width='89'>IP</th>
                  <th width='77'>Browser</th>
				  <th width='120'>OS</th>
                     </tr>";

     while($row = mssql_fetch_array($query)) {
         echo " <tr style='color:white; font-size: 25px;' align='center'>";
            echo "<td>" . $row['tarikata'] . "</td>";
            echo "<td><b>" . $row['chas'] . "</b></td>";
            echo "<td>" . $row['komanda'] . "</td>";
            echo "<td><font size='3' color='#FF794C'><b>" . $row['ip'] . "</b></font></td>";
            echo "<td>" . $row['browser'] . "</td>";
			echo "<td>" . $row['os'] . "</td>";
            echo "</tr>";
			}

         echo "</table>";

?>

Трябва да се създаде една таблица с име "antislqinjection" с колонки, както се вижда от скрипта : "tarikata" ," ip" , "komanda" , "chas" , "browser" , "os", катто колонка "chas" трябва да е задължително от тип datetime, защото няма да ви вади датата иначе. Другите са varchar.
Някой, ако иска може да добави таблицата да се крейтва и да постне скрипта за да е по-лесно за всички.

Надявам се, че все на някой ще му е полезно.
Ако имате въпрости пишете ми, ще помагам с каквото мога и доколкото ми стигат знанията.
 
в това има 2-ва големи проблема

1. много е стар и използва функции които са премахнати и не може да се използва в нови версии на PHP които са по защитени

2. ползва база данни за записване а това води до няколко проблема като един от тях е че някой може да на спами 2000-5000 реда с рефрешва страницата а това ще доведе до голям лаг или сриване на сървъра

моя съвет е не ползвайте това само ще си навлечете повече главоболия а и вече почти всеки сайт има добра SQL Injection защита

другия ми съвет е към този който го е качил ако искаш това да работи добре НЕ запазвай в базата с данни а във файлове
 
Last edited:
Ами, да затова не бях се замислял за флууд на базата по този начин. Защо не преложиш някой по-добра защита от по-нови версии.
 
всякакви защити под формата на сял кодове повече те прецакват от колкото да помагат... за пример анти дупе скрипта ,проверява всеки предмет в сървъра в резултат --> ужасен лаг и т.н :Д тва е като "anti" flood скрипта дето се слага в index.php който "много помага" (сарказъм,сарказъм) :Д....
 
Ами, да затова не бях се замислял за флууд на базата по този начин. Защо не преложиш някой по-добра защита от по-нови версии.

заповядай това е от DT Web 0.1 последния update(не е качен) :)
 

Attachments

  • security.rar
    793 bytes · Views: 78
security.rar как се ползва

това е функцията с тест към нея взимаш всичко което е в <?php ?> слагаш го в сайта и си готов само че трябва да направиш папка logs

html-а е само за тест и да даде представа как може да си показваш логовете
 
Status
Not open for further replies.