Jump to content
Sign in to follow this  
superpupervest

Универсальная защита от xss-атак и sql-инъекций

Recommended Posts

 

Я не занимаюсь технической поддержкой сайтов, но так уж сложилось, что ко мне часто обращаются за помощью. С одной стороны отказывать неудобно, да и не выгодно с коммерческой точки зрения, с другой за большое спасибо в магазине тоже не расплатишься. Поэтому я решил написать универсальное решение, но столкнулся с некоторыми проблемами. 
Суть решения заключается в том, чтобы отловить данные POST, GET, COOKIE и обработать их еще до того, как сайт произведет с ними какие-либо действия.
Вот собственно сам код

$jsxss="onabort,oncanplay,oncanplaythrough,ondurationchange,onemptied,onended,onerror,onloadeddata,onloadedmetadata,onloadstart,onpause,onplay,onplaying,onprogress,onratechange,onseeked,onseeking,onstalled,onsuspend,ontimeupdate,onvolumechange,onwaiting,oncopy,oncut,onpaste,ondrag,ondragend,ondragenter,ondragleave,ondragover,ondragstart,ondrop,onblur,onfocus,onfocusin,onfocusout,onchange,oninput,oninvalid,onreset,onsearch,onselect,onsubmit,onabort,onbeforeunload,onerror,onhashchange,onload,onpageshow,onpagehide,onresize,onscroll,onunload,onkeydown,onkeypress,onkeyup,altKey,ctrlKey,shiftKey,metaKey,key,keyCode,which,charCode,location,onclick,ondblclick,oncontextmenu,onmouseover,onmouseenter,onmouseout,onmouseleave,onmouseup,onmousemove,onwheel,altKey,ctrlKey,shiftKey,metaKey,button,buttons,which,clientX,clientY,detail,relatedTarget,screenX,screenY,deltaX,deltaY,deltaZ,deltaMode,animationstart,animationend,animationiteration,animationName,elapsedTime,propertyName,elapsedTime,transitionend,onerror,onmessage,onopen,ononline,onoffline,onstorage,onshow,ontoggle,onpopstate,ontouchstart,ontouchmove,ontouchend,ontouchcancel,persisted,javascript";
$jsxss = explode(",",$jsxss);
foreach($_POST as $k=>$v)
{
    if(is_array($v))
    {
        foreach($v as $Kk=>$Vv)
        {
            $Vv = preg_replace ( "'<script[^>]*?>.*?</script>'si", "", $Vv );
            $Vv = str_replace($jsxss,"",$Vv);
            $Vv = str_replace (array("*","\\"), "", $Vv );
            $Vv = strip_tags($Vv);
            $Vv = htmlentities($Vv, ENT_QUOTES, "UTF-8");
            $Vv = htmlspecialchars($Vv, ENT_QUOTES);
            $_POST[$k][$Kk] = $Vv;
        }
    }
    ELSE
    {
        //Сначала удаляем любые скрипты для защиты от xss-атак
        $v = preg_replace ( "'<script[^>]*?>.*?</script>'si", "", $v );
        //Вырезаем все известные javascript события для защиты от xss-атак
        $v = str_replace($jsxss,"",$v);
        //Удаляем экранированание для защиты от SQL-иньекций
        $v = str_replace (array("*","\\"), "", $v );
        //Экранируем специальные символы в строках для использования в выражениях SQL
        $v = mysql_real_escape_string( $v );
        //Удаляем другие лишние теги.    
        $v = strip_tags($v);
        //Преобразуеv все возможные символы в соответствующие HTML-сущности
        $v = htmlentities($v, ENT_QUOTES, "UTF-8");
        $v = htmlspecialchars($v, ENT_QUOTES);
        //Перезаписываем GET массив
        $_POST[$k] = $v;
    }
    
}[/CODE]
Тоже самое я сделал по аналогии с  _GET и _COOKIE
Основные недостатки. 

1) У меня так и не вышло обработать, а точнее перезаписать их внутри функции и передать _POST, _GET и _COOKIE в качестве переменных, а главное, как следствие, обработать многомерные массивы данных рекурсивно. Соответственно $_POST[][], $_POST[][][] и тд уже обработать не выйдет и каждый такой массив надо вставлять отдельно. Массив может быть бесконечно большой, а код получится бесконечно громозкий. 

2) Не охота убирать функцию mysql_real_escape_string ведь никогда не знаешь, где ее забыли упомянуть, но возникает проблема излишнего экранирования символов. 

3) strip_tags удаляет все теги. Мне бы не хотелось убирать все, а лишь самые опасные теги, но беда в том, что в дополнительных параметрах можно указать только теги, которые нужно оставить. Конечно, можно использовать регулярные выражения, но к сожалению, нет уверенности в том, что не забудешь что-нибудь важное, поэтому если у кого-то есть отличная замена этому, то предлагаю собрать все в кучу и избавиться от strip_tags

4) Ну и жду других советов по данному вопросу. 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Topics

    • В Кыргызстане зарегистрирована первая Универсальная цифровая биржа

      Биржа Envoys Vision Digital Exchange зарегистрирована в полном соответствии с законодательством  Кыргызстана. Она получила лицензии регулятора на организацию торговли на рынке ценных бумаг и депозитарную деятельность. Как сообщил прессе  председатель правления биржи Алмазбек Шабданов, площадка предоставит возможность проведения операций как с традиционными финансовыми активами (акции, облигации), так и цифровыми (криптовалюты, токенизированные ценные бумаги и т.п.). Клиенты смогут продава

      in Новости криптовалют

    • [WEAC][PoW]Weacoin 2.0 - универсальная интернет монета

      Уже известная ранее монета Weacoin получила вторую жизнь. Теперь она имеет алгоритм добычи PoW. В том виде, в каком она была в 2018, монета не сыскала длительной популярности в обществе и через полгода количество добытчиков сошло к 0. Теперь же монета имеет более совершенный код, поддерживает SegWit, а так же добывается с помощью доказательства работы. Параметры монеты: Награда за блок 35 монет Максимум монет 14950000 RPC порт 31015 Уполовинивание награды на 210 000

      in Scrypt

    • Защита Александра Винника обжалует приговор парижского суда

      Адвокаты Александра Винника, обвиняемого в отмывании от $4 млрд до $9 млрд через криптовалютную биржу BTC-e, готовятся обжаловать приговор парижского суда. Летом 2017 года Винник был задержан в Греции по запросу прокуратуры США. В начале этого года Винник был экстрадирован во Францию, и лишь в августе дело было передано в парижский суд. Судебное слушание длилось с 19 по 23 октября. 7 декабря суд в Париже приговорил Винника к пяти годам лишения свободы и штрафу в €100 000 с учетом компенса

      in Новости криптовалют

    • Защита сети от флуда транзакциями

      кто знает а у сети биткоина есть какаято защита от засирания мемпула? блоки защищается сложностью , а пул?

      in Биткоин

    • В браузере Microsoft Edge появилась защита от криптоджекинга

      Microsoft выпустила новую версию браузера Edge на базе Chromium со встроенной защитой от скачивания скриптов для скрытого майнинга криптовалют.   Microsoft выпустила первую полную версию своего браузера на базе Chromium, в которую были добавлены изменения в области дизайна и функциональности. В частности, браузер предоставляет новые функции безопасности для защиты пользователей от автоматической загрузки нежелательных приложений, таких как рекламное ПО и других вредоносных программ

      in Новости криптовалют

×
×
  • Create New...