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

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

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

      in Биткоин

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

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

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

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

      Новый функционал для защиты от трекеров онлайн-активности и скрытого майнинга криптовалют появился в версиях браузера Mozilla Firefox Nightly 68 и Beta 67.   Как сообщает компания Mozilla, команда успешно завершила работу по борьбе со скрытым майнингом криптовалют и отслеживанием онлайн-активности пользователей. Необходимость внедрения подобной защиты была определена еще в прошлом году.   Криптоджекинг или скрытый майнинг криптовалют – одна из самых серьезных угроз п

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

    • В браузере Firefox появится защита от майнинг-скриптов

      В ближайших версиях популярного веб-браузера Firefox появится автоматическая защита от вредоносных скриптов для майнеров, причем активирована она будет по умолчанию. Об этом сообщается в блоге некоммерческой компании-разработчика Mozilla Foundation.   Некоторые из грядущих обновлений, включая функцию защиты от слежения, уже доступны в бета-версии Firefox Nightly. Как отмечает вице-президент Mozilla Ник Нгуен (Nick Nguyen), главная задача нововведений — блокировать от сторонних разработ

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

    • Самодельная защита от КЗ для серверных БП

      Курс не растет, карты дорогие, профит упал...чем бы себя занять??   Навеяно просмотром этого ролика - https://www.youtube.com/watch?v=Es6bQW5TBuo   Собираю фермы на серверных БП и задумался над модернизацией дабы избежать полыхающих ящиков с видюхами  :o Для ферм в 5 карт 1060 использую нулевые шины 4шт, на которые идет с БП кабель 6мм2. От шин уже собираю косы по 3 провода на "+" и "-" по 1.5мм2 соответственно на один разъем 6pin.    В этом ролике https://www.youtube.com/watch?v=ppRLg5z9

      in Блоки питания, ИБП, силовая часть

×
×
  • Create New...