За последние 24 часа нас посетили 32002 программиста и 1380 роботов. Сейчас ищут 902 программиста ...

Защита от XSS

Тема в разделе "PHP для новичков", создана пользователем Danil005, 25 янв 2017.

  1. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Здравствуйте, как мне защитить сайт от XSS внедрений, если мне нужно вывести данные из бд со всеми тегами HTML (<b>, <i> и т.д.), но при этом запретить внедрять JS код. strip_tags в данном случае не подходит.
     
  2. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Ну в твоем случае если ты хочешь оставить теги, то тебе как минимум нужно разобраться с тегами <script></script> Например так:
    PHP:
    1. $html = preg_replace('#<script(.*?)>(.*?)</script>#is', '', $html);
    Ну и еще смотреть обработчики событий в тегах.
     
    Danil005 нравится это.
  3. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    А если например имеется форма ckeditor, как обойтись? Просто я видел, у людей есть большие class-ы для защиты от xss такого рода
     
  4. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Я тебе конкретный класс конечно не предоставлю но есть общая практика предотвращения XSS на довольно известном в ИБ кругах ресурсе OWASP. https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet
    Что же касается ckeditor и почему люди пишут классы для предотвращения XSS.Все по сути что есть на стороне пользователя - можно подрезать,подредактировать или вообще переписать как тебе нужно,поэтому говорить о какой либо безопасности встроенной в js не имеет смысла.И исходя из этого в любом случае на серверной стороне нужно проверять все.Поэтому исходя из своих потребностей и руководствуясь данным материалом - можешь вполне набросать свой класс под свои нужды.
     
    Danil005 нравится это.
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    ещё надо не забыть onload или onclick атрибуты у тегов и другие в которые можно внедрить javascript
     
    Danil005 нравится это.
  6. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Простите за долгое отсутствие, класс необходимо писать со всеми исключениями, например таких как запрещенных команд: <script>something</script> и так каждый аргумент js? Иль есть более просто способ?
    Каким образом можно внедрить вредоносный скрипт в onload или onclick? И как грамотно защитить?
    --- Добавлено ---
    И еще, мне заменять все <> на &lt; и &gt; ?
     
  7. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    1. Фильтровать нужно любые входные параметры. Вот готовое решение https://github.com/voku/anti-xss
    2.
    Код (Text):
    1. <a href="http://example.com/" onclick="alert('XSS!')" target="_blank">привет</a>
     
    Danil005 нравится это.
  8. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Понял, спасибо.
     
  9. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Слушайте, у меня есть некоторая проблема. Я подключаю файл AntiXSS.php через обычный include, однако, при присвоении переменной выдает ошибку:
    Fatal error: Class 'AntiXSS' not found in D:\Server\OpenServer\domains\asdplatform.ru\test.php on line 3
    Почему?
     
  10. anderstender

    anderstender Новичок

    С нами с:
    15 ноя 2016
    Сообщения:
    55
    Симпатии:
    25
    логично предположить что неправильно подключаешь файл
    скинь полный путь где лежит класс и строку подключения и желательно код класса
     
  11. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Используй Composer:
    Код (Text):
    1. composer require voku/anti-xss
    Затем
    PHP:
    1. $antiXss = new AntiXSS();
     
    Danil005 нравится это.
  12. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Я использовал, однако все равно ничего не работает.
    --- Добавлено ---
    upload_2017-1-27_15-58-1.png
    --- Добавлено ---
    Да это понятно, путь верен. Перепроверил все. Класс вот.
    --- Добавлено ---
    Возможно я не понимаю, как работает Composer...
     
  13. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Ты не подгружаешь autoload Композера
    [​IMG]
     
    Danil005 нравится это.
  14. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    А как подгружать? Я честно говоря в первые столкнулся с такой задачей.
     
  15. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Ну так я тебе обвел красным как подгружать
    PHP:
    1. require 'vendor/autoload.php';
     
    Danil005 нравится это.
  16. Danil005

    Danil005 Активный пользователь

    С нами с:
    2 янв 2015
    Сообщения:
    528
    Симпатии:
    30
    Все, я разобрался! Большое спасибо!