помогите пожалуйста с защита от SQL иньекции и XSS

kilk27855

Новичок
Добрый день ув форумчани phpclub помогите решить проблему как обезапасить сайт его взломали так как не какой защиты нету от SQL иньекции и XSS, движок старый пабликовый не какой информации нету над разроботкай и тем более подержки нету ее так вот взялся я за него и сам доробатываю ее так вот такой вопрос встал у меня как выше я написал при хороший посещаймости сайта моего на этом движке мне его взломали сайт как кто взломали и поставили редирект на левый сайт, вроде я решил это вопрос вёл в .htaccess
Код:
#Защищаем .htaccess файл
<files .htaccess="">
order allow,deny
deny from all
</files>

#Включаем отслеживание сим-ссылок
Options +FollowSymLinks
#Запускаем url_rewriting
RewriteEngine On
#Блокируем все ссылки, содержащие <script>
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
#Блокируем все скрипты, которые пытаются изменить переменные PHP Globals:
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
#Блокируем все скрипты, которые пытаются изменить переменную _REQUEST:
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
#Перенаправляем все подобные на страницу с ошибкой 403 — запрещено
RewriteRule ^(.*)$ index.php [F,L]
так вот думаю сделал c .htaccess пока работаю на локале и доробатываю cms так вот теперь вопрос встал о защита от SQL иньекции и XSS
перешеверял я движок каждый фаил и нашёл из одних фаилов в ajax.php такую строку
Код:
# Защита от SQL иньекции и XSS
    $act     = intval($_REQUEST['type']);
    $id      = intval($_REQUEST['id']);
    $uID     = (intval($_REQUEST['uID'])) ? intval($_REQUEST['uID']) : $_SERVER['REMOTE_ADDR'];
   
    $my       = $main->db->query('SELECT * FROM `mk_list` where id=\''.$id.'\'');
    $row_my   = $main->db->fetch($my);
    if($row_my == 0)
    {
        echo "ACCESS DENIED!!111";
        exit();
    }
   
    $query   = $main->db->query('SELECT * FROM `mk_vote` where id_serv=\''.$id.'\' and ip=\''.$_SERVER['REMOTE_ADDR'].'\'');
    while ($row_vt = $main->db->fetch($query))
    {
        $date = $row_vt['date'];
    }
    $row_nm  = $main->db->num($main->db->query('SELECT * FROM `mk_vote` where id_serv=\''.$id.'\' and ip=\''.$_SERVER['REMOTE_ADDR'].'\''));
    $row_ab  = $main->db->num($main->db->query('SELECT * FROM `mk_vote` where id_serv=\''.$id.'\''));


    if($row_nm > 0 && $date > time())
        echo 'already';
    elseif($row_ab >= $conf['dvote'])
        echo 'already2';
    else
    {
        if($act == 'up')
        {
            $updateSQL = sprintf('UPDATE `mk_list` SET golos=golos+\'1\' where id=\''.$id.'\'');
            $Result1   = $main->db->query($updateSQL);
            $my      = $main->db->query('SELECT * FROM `mk_list` where id=\''.$id.'\'');
            $row_my  = $main->db->fetch($my);
            $date    = time() + ( 60 * 60 * 24 );
            $main->db->query('INSERT INTO mk_vote(id_serv, user, ip, date) VALUES (\''.$id.'\',\''.$uID.'\',\''.$_SERVER['REMOTE_ADDR'].'\',\''.$date.'\')');
            echo 'thanks';
        }
    }
}

function favourites()
{
    global $main;
    $sID      = intval($_REQUEST['sID']);
    $uID      = intval($_REQUEST['uID']);
    $act      = intval($_REQUEST['act']);
    $servID   = $main->db->fetch($main->db->query("SELECT * FROM `mk_favourites` where uID='".$uID."'"));

    if ($act=='add')
    {
        if($servID['sID'] == '')
        {
            $main->db->query("UPDATE `mk_favourites` SET `sID`='".$sID."' where uID='".$uID."'");
            echo 'add';
        }
        else
        {
            $main->db->query("UPDATE `mk_favourites` SET `sID`=concat(sID, ',', $sID) where uID='".$uID."'");
            echo 'add';
        }    }
    elseif($act=='del')
    {
        $massiv = explode(',',$servID['sID']);
        $full   = $servID['sID'];
        for($i=0;$i<count($massiv);$i++)
        {
            if(!$i)
                $return = str_replace($sID,'',$full);
            elseif($massiv[0] == $sID)
                $return = str_replace($sID.',','',$full);
            else
                $return = str_replace(','.$sID,'',$full);
            $main->db->query('UPDATE `mk_favourites` SET `sID`=\''.$return.'\' where uID=\''.$uID.'\'');
        }
        echo 'del';
    }
}

function online()
{
    global $main;
    $onl_time    = time() - ( 60 * 10 );
    $all_onl     = $main->db->num($main->db->query("SELECT * FROM `mk_sessions` where time>'$onl_time' group by uname"));
    echo $all_onl;
}

function sitemap()
{
    global $main;
    $result = $main->db->query("SELECT * FROM `mk_list` where status='1'");
    $time   = gmdate("Y-m-j", time() + 3600*(3+date("I")));

    $handler = fopen('../../sitemap.xml', "w");
    fwrite($handler, "<?xml version=\"1.0\" encoding=\"windows-1251\"?>\r\n");
    fwrite($handler, "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\r\n");

    $sitemaplink = "http://".$_SERVER['HTTP_HOST'].rtrim(dirname($_SERVER['PHP_SELF']),'/\\')."/";
    $sitemaplink = preg_replace( "#(.+)engine/ajax/#", "\\1", $sitemaplink ); 

    while ($sitemap = $main->db->fetch($result))
    {
        fwrite($handler, "<url>\r\n");
        fwrite($handler, "<loc>".$sitemaplink."server-".$sitemap['id']."/</loc>\r\n");
        fwrite($handler, "<lastmod>".$time."</lastmod>\r\n");
        fwrite($handler, "<changefreq>weekly</changefreq>\r\n");
        fwrite($handler, "<priority>0.8</priority>\r\n");
        fwrite($handler, "</url>\r\n");
    }

   
   
   
   
    $res = $main->db->query("SELECT * FROM `mk_stathtml` where stat='1'");
    $time   = gmdate("Y-m-j", time() + 3600*(3+date("I")));
    while ($sitemp = $main->db->fetch($res))
    {
        fwrite($handler, "<url>\r\n");
        fwrite($handler, "<loc>".$sitemaplink."page/".$sitemp['cid']."/</loc>\r\n");
        fwrite($handler, "<lastmod>".$time."</lastmod>\r\n");
        fwrite($handler, "<changefreq>weekly</changefreq>\r\n");
        fwrite($handler, "<priority>0.9</priority>\r\n");
        fwrite($handler, "</url>\r\n");
    }

   
   
   
    fwrite($handler, "<url>\r\n");
    fwrite($handler, "<loc>".$sitemaplink."choose/</loc>\r\n");
    fwrite($handler, "<lastmod>2014-02-25</lastmod>\r\n");
    fwrite($handler, "<changefreq>weekly</changefreq>\r\n");
    fwrite($handler, "<priority>0.9</priority>\r\n");
    fwrite($handler, "</url>\r\n");


        fwrite($handler, "<url>\r\n");
    fwrite($handler, "<loc>".$sitemaplink."vote/</loc>\r\n");
    fwrite($handler, "<lastmod>2014-02-25</lastmod>\r\n");
    fwrite($handler, "<changefreq>weekly</changefreq>\r\n");
    fwrite($handler, "<priority>0.9</priority>\r\n");
    fwrite($handler, "</url>\r\n");
   

   
   
   
   
   
   
    fwrite($handler, "</urlset>");
    fclose($handler);

    $sitemaplink = "http://".$_SERVER['HTTP_HOST'].rtrim(dirname($_SERVER[PHP_SELF]),'/\\')."/sitemap.xml";
    $sitemaplink = preg_replace( "#(.+)engine/ajax/#", "\\1", $sitemaplink ); 
    $sitemaplist = array (
        "http://google.com/webmasters/sitemaps/ping?sitemap=".$sitemaplink,
        "http://submissions.ask.com/ping?sitemap=".$sitemaplink,
        "http://bing.com/webmaster/ping.aspx?siteMap=".$sitemaplink,
        "http://api.moreover.com/ping?sitemap=".$sitemaplink,
    );

    foreach($sitemaplist as $i=>$sitemapengine)
    {
        $parse = parse_url($sitemapengine);
        if(!isset($parse['host'])) return false;
        $host  = $parse['host'];
        $port  = isset($parse['port'])?$parse['port']:80;
        $path  = isset($parse['path'])?$parse['path']:'/';
        $query = isset($parse['query'])?$parse['query']:'/';

        if($ping = @fsockopen($host, $port, $errno, $errstr, 1))
        {   
            fputs ($ping, "GET ".$path."?".$query." HTTP/1.0\r\n".
            "User-Agent: Admin\r\n".
            "Host: ".$host."\r\n\r\n");
        }
        fclose($ping);
    }
}


function update()
{
    global $conf;
    $update = strtolower($_SERVER['HTTP_HOST']);
    $update = @file_get_contents('http://samp-stats.ru/version.php?u='.$update);
    echo $update;
}
так вот из за этого кода возможна взломать сайт через sql инъекцию или через xss, помогите улучшить защиту, так как я нашёл данного разрабочика сms он не ведёт бесплатную разработку + не хочет конкурентов видеть в просторе интернета конкурентов а если видит ломает как орехи и ставит редирект на его свой сайт, ув форумчани помогите пожалуйста
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
перешеверял я движок каждый фаил и нашёл из одних фаилов в ajax.php такую строку
Далее простыня кода...

И, да, давай ты начнешь ставить знаки препинания, читать твои излияния просто нереально.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Я не друг, помогать мы помогаем тем, кто хочет учить язык. Пока я не понял даже в какой у тебя "строке" проблема. И чего ты хочешь добиться. Убрать дырки в sql тебе поможет хорошая обертка над БД, в которой есть поддержка плейсхолдеров.
 

kilk27855

Новичок
Всем привет нашёл дыру в сайте как исправить ?
1 код
Код:
 $row = $main->db->fetch($main->db->query('SELECT * FROM `mk_user` where id=\''.$main->auth->userid.'\''));
if(md5($_POST['old_pass'])!=$row['password'] or !$_POST['old_pass']) {
Код:
$contents .= '<td><a href="' . base64_decode($reffer['url']) . '" class="white" target="_blank">'.$reffer['host'].'</a></td>';
;
2 код
 

AnrDaemon

Продвинутый новичок
Переписать нормально.
Никогда не запрашивай из БД информацию, которая тебе не нужна.
 

AnrDaemon

Продвинутый новичок
Бери любой форумный движок и смотри, как там сделана аутентификация.
 
Сверху