Jump to content

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


Recommended Posts

Posted

 

Я не занимаюсь технической поддержкой сайтов, но так уж сложилось, что ко мне часто обращаются за помощью. С одной стороны отказывать неудобно, да и не выгодно с коммерческой точки зрения, с другой за большое спасибо в магазине тоже не расплатишься. Поэтому я решил написать универсальное решение, но столкнулся с некоторыми проблемами. 
Суть решения заключается в том, чтобы отловить данные 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) Ну и жду других советов по данному вопросу. 

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
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Similar Topics

    • Вилли Ву: Защита от атак квантовых компьютеров нарушит правила Биткоина

      Соучредитель проекта Bitcoin Vector и инвестфонда CMCC Crest Вилли Ву (Willy Woo) опасается, что необходимость хардфорка сети Биткоина, защищающего блокчейн первой криптовалюты от атак квантовых компьютеров, может навредить криптоинвесторам. Рынок уже начал учитывать риск наступления «Дня Q», когда появится достаточно мощный квантовый компьютер, способный взломать алгоритмы, лежащие в основе открытых ключей Биткоина, уверен криптобизнесмен. День Q может наступить уже через пять-пятнадцать л

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

    • Эрик Трамп: «Биткоин — лучшая защита от инфляции и коррупции»

      Исполнительный вице-президент Trump Organization Эрик Трамп (Eric Trump) поделился рассуждениями о будущем криптовалют и рассказал об успехах своей майнинговой компании. На мероприятии Yahoo Finance Invest сын президента США рассказал, что в сентябре его майнинговая компания American Bitcoin (ABTC), сооснователем которой является его брат Дональд Трамп-младший, вышла на фондовый рынок. Сейчас рыночная капитализация American Bitcoin достигла уже около $4 млрд. Эрик Трамп заявил, что слияние

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

    • Защита разработчика Tornado Cash попросит суд прекратить разбирательство

      Защита разработчика криптомиксера Tornado Cash Романа Шторма планирует ходатайствовать о прекращении судебного разбирательства. По мнению адвокатов, пострадавшая от мошенничества свидетельница обвинения не смогла продемонстрировать прямую связь преступления с сервисом Tornado Cash. Адвокаты подали ходатайство окружному судье Кэтрин Полк Файлле (Katherine Polk Failla). Свидетель обвинения Ханьфэн Линь (Hanfeng Lin) заявила, что в 2021 году стала жертвой мошенничества, потеряв почти $250 000.

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

    • Нассим Талеб: «Биткоин — плохая защита от краха рынков»

      Автор бестселлера «Черный лебедь» Нассим Талеб заявил, что во время падения фондового и криптовалютного рынков биткоин продемонстрировал недостаточную способность к защите инвестиций. Как заявил в интервью на программе Squawk Box канала CNBC Нассим Талеб (Nassim Taleb), резкое падение стоимости цифровых активов показало, что биткоин не оправдывает звание резервного актива.   «Биткоин — плохая защита от системного краха. Он в очередной раз доказывает, что не является страховкой от по

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

    • Защита экс-разработчика Эфириума Вирджила Гриффита потребовала смягчить приговор

      Адвокат бывшего разработчика Эфириума Вирджила Гриффита направил ходатайство судье Окружного суда Южного округа Нью-Йорка Кевину Кастелу с требованием смягчить наказание для своего подзащитного. В письме адвоката Глена Гаррета МакГорти (Glen Garrett McGorty), защищающего интересы Вирджила Гриффита (Virgil Griffith), содержится просьба пересмотреть приговор. Речь идет о недавно принятых поправках к руководящим принципам вынесения приговоров в США, которые предусматривают снижение уровня прав

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

×
×
  • Create New...