Здравейте,
От доста време се каня да си оправя anti-sql защитата на сайта и вчера се хванах. Защита е стара и за никой не е нещо ново. Аз съм я виждал в много различни уебове. Не е ясно самата защита доколко е читава, поне аз не мога да кажа, защото не разбирам и не мога да я анализирам в детайли. Според мен със сигурност спира по елементарните опити за инжекция. Така или иначе, аз я харесах, защото си имаше опция за записване в базата на логове. Но при мен не работеше, както трябва.. показваше грешно айпи при опит за инжекция и часът го показваше с някакви си цифри, които аз не разбирам или поне ми беше сложно да ги разбера, все едно 14062014110055 - което примерно трябва да значи 14.06.2014 еди колко си часа. Та както и да е.
Аз реших да се хвана и с моите дебилни познания да си оправя датите да ми ги показва прилично, да ми показва реалното айпи и проверка за прокси, вид браузър и вид операционна система. И това модулче да си го пусна в админ панела на Дамян, за да си гледам логовете през панела. Не съм дизайнер, но се постарах да го направя модула така, че да е съвместим с всички уебове. Добавил съм стил в таблицата, и можете да си го едитвате според вашите нужди без да се налага да импортвате външен клас. Реших да споделя файловете с тези, които имат нужда от тях. Предполагам, че все на някой ще му свършат работа. Не знам кой е авторът на оригиналният модул, но изказвам благодарност към него и предполагам, че няма нищо против, че съм го едитнал. Той при мен така или иначе не работеше читаво.
Може да си добавите в самият скрипт да прави автоматична таблица в базата аз не съм го направил, защото не му разбирам. Аз си правих моята на ръка.
Ето я защитката
А ето го и модула за админ панел или където искате да си го сложите
Трябва да се създаде една таблица с име "antislqinjection" с колонки, както се вижда от скрипта : "tarikata" ," ip" , "komanda" , "chas" , "browser" , "os", катто колонка "chas" трябва да е задължително от тип datetime, защото няма да ви вади датата иначе. Другите са varchar.
Някой, ако иска може да добави таблицата да се крейтва и да постне скрипта за да е по-лесно за всички.
Надявам се, че все на някой ще му е полезно.
Ако имате въпрости пишете ми, ще помагам с каквото мога и доколкото ми стигат знанията.
От доста време се каня да си оправя 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.
Някой, ако иска може да добави таблицата да се крейтва и да постне скрипта за да е по-лесно за всички.
Надявам се, че все на някой ще му е полезно.
Ако имате въпрости пишете ми, ще помагам с каквото мога и доколкото ми стигат знанията.