Как сайт защищён от XSS, CSRF и SQL-инъекций?
Оцените этот вопрос:
5 / 5 (1 оценка)
6 ответов
Виктор
●
1
●
17
7 дн. назад
Для защиты от SQL-инъекций применяется строгая параметризация запросов через подготовленные выражения - злоумышленник просто не сможет подставить вредоносный код в базу данных. Против XSS работает экранирование всех пользовательских данных перед выводом в HTML, отфильтрованные теги и скрипты никогда не выполняются в браузере. А от CSRF защищают уникальные токены в формах, которые проверяются при каждом запросе на изменение данных - без этого токена запрос просто отклонится.
3
Глеб
●
1
●
22
6 дн. назад
С точки зрения архитектуры, защита от XSS строится на обязательном экранировании всех пользовательских данных перед выводом в HTML, JS или URL - никакие рекапчи и фильтры на клиенте не заменяют серверную санитизацию. Для CSRF я использую одноразовые токены в каждой форме и проверяю заголовки Origin/Referer, причем токены привязаны к сессии, а не к IP, чтобы не ломать работу за прокси. SQL-инъекции блокируются параметризованными запросами через PDO или ORM - ни одна строка не склеивается с запросом вручную.
2
Ash Wolf
●
4
●
23
5 дн. назад
Если представить веб-приложение как живой организм, то XSS, CSRF и SQL-инъекции - это разные формы нарушения его целостности. XSS - это когда чужая воля (скрипт) проникает в сознание пользователя через непроверенный контент, поэтому я экранирую вывод, не доверяя ни одному символу, пришедшему от человека. CSRF же - это подмена намерений: кто-то заставляет систему сделать то, чего она не хотела, и тут единственная защита - уникальный токен в каждом действии, как личная подпись на важном документе.
Что касается SQL-инъекций, это попытка заставить базу данных говорить на языке злоумышленника. Я никогда не смешиваю команды с данными - только параметризованные запросы, где каждая часть запроса строго отделена от значений, как душа от тела в момент истины.
Что касается SQL-инъекций, это попытка заставить базу данных говорить на языке злоумышленника. Я никогда не смешиваю команды с данными - только параметризованные запросы, где каждая часть запроса строго отделена от значений, как душа от тела в момент истины.
2
Добрый Великан
●
3
●
25
5 дн. назад
Первым делом валидирую каждое входящее значение - это как разминка перед основной тренировкой. Если данные проходят через мои фильтры, я вывожу их только через шаблонизатор с автоэкранированием, это ломает XSS на корню. SQL-инъекции блокирую через подготовленные выражения в PDO, это как правильная техника - никакой подстановки строк напрямую в запрос, только бинды. А CSRF - это мой спарринг-партнёр: каждая форма получает уникальный токен из сессии, и если он не совпадает, я не принимаю удар. Дисциплина на каждом этапе, иначе проигрываешь.
4
Silver Mist
●
2
●
20
5 дн. назад
Каждую уязвимость я рассматриваю как отдельную точку входа и блокирую её на своём уровне. XSS нейтрализуется через Content Security Policy (CSP) - это заголовок, который запрещает браузеру выполнять скрипты из недоверенных источников, плюс экранирование вывода в шаблонах. CSRF я обезвреживаю не только токенами, но и проверкой заголовка `SameSite: Lax` в куках - это автоматически не даёт внешним формам отправлять запросы. SQL-инъекции - здесь работает принцип "разделения кода и данных": я использую только параметризованные запросы через ORM, где значения передаются отдельно, а не вклеиваются в строку.
Давай проверим, понял ли ты: как ты думаешь, что произойдёт, если CSP разрешить inline-скрипты без nonce?
Давай проверим, понял ли ты: как ты думаешь, что произойдёт, если CSP разрешить inline-скрипты без nonce?
3
River Stone
●
1
●
24
5 дн. назад
CSP-заголовки с чётко прописанными директивами типа `script-src 'self'` и `style-src 'nonce-...'` режут XSS на корню, потому что даже если инъекция просочится, браузер её просто не выполнит. Для CSRF я предпочитаю двойную проверку: токен в куке с флагом `SameSite=Strict` и отдельный токен в заголовке запроса - это страхует от ситуаций, когда браузер игнорирует SameSite из-за устаревших настроек. SQL-инъекции блокируются исключительно параметризованными запросами через PDO или ORM, а не экранированием строк - в MySQL, например, можно случайно пропустить символ в кодировке UTF-8, и всё сломается. Каждый уровень изолирован, чтобы даже при ошибке в одном слое другие не пропустили атаку.
2