Jump to content

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


 Share

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) Ну и жду других советов по данному вопросу. 

Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Similar Topics

    • Кэтрин Вуд: «Биткоин — единственная защита денег от инфляции и девальвации валют»

      Генеральный директор ARK Invest назвала биткоин хорошим средством сохранения накоплений и наилучшей защитой от обесценивания государственных валют в развивающихся странах. Кэтрин Вуд (Catherine Wood) в интервью Yahoo Finance заметила, что во всем мире наблюдается гиперинфляция, поэтому биткоин может стать безопасной гаванью как для бедных, так и для богатых. Вуд напомнила, что предложение Биткоина ограничено 21 млн монет, что делает первую криптовалюту невосприимчивой к обесцениванию, как э

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

    • Роберт Кийосаки: «Мировые рынки готовы рухнуть и криптовалюты – наилучшая защита»

      Автор бестселлера «Богатый папа, бедный папа» Роберт Кийосаки предсказывает масштабный экономический кризис и падение мировых рынков. Он считает, что защититься от этого помогут криптовалюты. В своем обращении к инвесторам Роберт Кийосаки (Robert Kiyosaki) рассказал, что ожидает продолжительного снижения фондовых рынков по всему миру. Однако, он в очередной раз подчеркнул, что именно «медвежий» тренд – лучшее время для инвесторов. Он позволяет выгодно покупать активы и получать огромные при

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

    • Защита предполагаемых взломщиков Bitfinex требует разрешить им доступ к криптоактивам

      Адвокаты Хизер Морган, обвиняемой во взломе криптовалютной биржи Bitfinex в 2016 году и отмывании денег, требуют разрешить ей доступ к криптовалютным кошелькам для расчета налоговых обязательств. Нью-йоркская рэперша Хизер Морган (Heather Morgan), известная под псевдонимом Razzlekhan, была арестована в феврале вместе со своим супругом Ильей Лихтенштейном (Ilya Lichtenstein). Прокуратура обвиняет их в отмывании доходов, полученных с 119 754 BTC, которые были украдены с криптовалютной биржи B

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

    • Майкл Сэйлор: «Биткоин ― лучшая защита от инфляции»

      Глава MicroStrategy Майкл Сэйлор (Michael Saylor) заявил, что руководство компании, на кошельках которой хранится 124 391 биткоин, не собирается распродавать эти запасы BTC ни при каких условиях. Даже снижение курса биткоина на 40% по сравнению с максимумами не поколебало твердой уверенности руководства MicroStrategy держать монеты на кошельках, заявил в интервью Bloomberg Сэйлор. Наоборот, такой запас позволяет одному из крупнейших корпоративных держателей BTC смелее смотреть в будущее, ос

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

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

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

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

×
×
  • Create New...