Поддержка серверов

CSecurityAntiVirus::OnPageStart: метод Битрикс

Постоянная ссылка: http://bxapi.ru/src/?id=175704

//    CSecurityAntiVirus::OnPageStart()
//    /bitrix/modules/security/classes/general/antivirus.php:106

    public static function OnPageStart()
    {
        if (CSecuritySystemInformation::isCliMode())
            return;

        if (self::isSafetyRequest()) //Check only GET and POST request
            return;

        global $APPLICATION, $DB, $BX_SECURITY_AV_TIMEOUT, $BX_SECURITY_AV_ACTION;
        $BX_SECURITY_AV_TIMEOUT = COption::GetOptionInt("security", "antivirus_timeout");
        $BX_SECURITY_AV_ACTION = COption::GetOptionInt("security", "antivirus_action");

        //user white list
        global $BX_SECURITY_AV_WHITE_LIST, $CACHE_MANAGER;
        if($CACHE_MANAGER->Read(36000, "b_sec_white_list"))
        {
            $BX_SECURITY_AV_WHITE_LIST = $CACHE_MANAGER->Get("b_sec_white_list");
        }
        else
        {
            $BX_SECURITY_AV_WHITE_LIST = array();
            $res = CSecurityAntiVirus::GetWhiteList();
            while($ar = $res->Fetch())
                $BX_SECURITY_AV_WHITE_LIST[] = $ar["WHITE_SUBSTR"];
            $CACHE_MANAGER->Set("b_sec_white_list", $BX_SECURITY_AV_WHITE_LIST);
        }

        //Init DB in order to be able to register the event in the shutdown function
        CSecurityDB::Init();

        //Check if we started output buffering in auto_prepend_file
        //so we'll have chances to detect virus before prolog
        if(defined("BX_SECURITY_AV_STARTED"))
        {
            $content = ob_get_contents();
            ob_end_clean();
            if(strlen($content))
            {
                $Antivirus = new CSecurityAntiVirus("pre");
                $Antivirus->Analyze($content);
                echo $content;
            }
        }

        //Initiate monitoring of output that can be after working antivirus.
        register_shutdown_function(array('CSecurityAntiVirus', 'PHPShutdown'));

        //Check notification from previous hit
        $fname = $_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/managed_cache/b_sec_virus";
        if(file_exists($fname))
        {
            $rsInfo = $DB->Query("select * from b_sec_virus where SENT='N'");
            if($arInfo = $rsInfo->Fetch())
            {
                if($table_lock = CSecurityDB::LockTable('b_sec_virus', $APPLICATION->GetServerUniqID()."_virus"))
                {
                    $SITE_ID = false;
                    do {
                        $SITE_ID = $arInfo["SITE_ID"];
                        if(strlen($arInfo["INFO"]))
                        {
                            $arEvent = unserialize(base64_decode($arInfo["INFO"]));
                            if(is_array($arEvent))
                                $DB->Add("b_event_log", $arEvent, array("DESCRIPTION"));
                        }
                        CSecurityDB::Query("update b_sec_virus set SENT='Y' where ID='".$arInfo["ID"]."'", '');
                    } while ($arInfo = $rsInfo->Fetch());

                    CTimeZone::Disable();
                    $arDate = localtime(time());
                    $date = mktime($arDate[2], $arDate[1]-$BX_SECURITY_AV_TIMEOUT, 0, $arDate[4]+1, $arDate[3], 1900+$arDate[5]);
                    CSecurityDB::Query("DELETE FROM b_sec_virus WHERE TIMESTAMP_X <= ".$DB->CharToDateFunction(ConvertTimeStamp($date, "FULL")), '');
                    CTimeZone::Enable();

                    CEvent::Send("VIRUS_DETECTED", $SITE_ID? $SITE_ID: SITE_ID, array("EMAIL" => COption::GetOptionString("main", "email_from", "")));

                    CSecurityDB::UnlockTable($table_lock);

                    @unlink($fname);
                }
            }
        }
    }
';

Блог разработчика

9 августа 2016 ResizeImageGet и простой водяной знак налету

Сегодня поговорим о том как проще всего воткнуть водяной знак на картинки в Битрикс. Например, на все изображения каталога.

21 июля 2016 Добавление вкладки в CRM коробки Битрикс24

В этом посте я покажу, как легко и просто добавить вкладку в сущность CRM. И не просто добавить, а вывести там свой контент.

21 июля 2016 Как просто обращаться из коробки Битрикс24 на сайт на базе Битрикс

К примеру вам хочется внутренним скриптом дернуть с сайта-магазина информацию, которая там, в свою очередь, закрыта некоторыми правами. Например, админскими. Можно конечно мутить свой REST, или иной формат общения, но проще всего воспользоваться штатным инструментом:

Текст сообщения*
Загрузить изображение