<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
  <url>
    <loc>https://hackandfix.ru/</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>daily</changefreq>
    <priority>1.0</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Hack &amp; Fix — AppSec-практика</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.9</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Каталог лабораторных Hack &amp; Fix</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.9</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Пути практики Hack &amp; Fix</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/blog</loc>
    <lastmod>2026-05-20</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/blog"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Блог Hack &amp; Fix</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/about</loc>
    <lastmod>2026-09-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.5</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/about"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/pricing</loc>
    <lastmod>2026-09-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/pricing"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/roadmap</loc>
    <lastmod>2026-09-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.4</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/roadmap"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/how-it-works</loc>
    <lastmod>2026-09-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/how-it-works"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/contact</loc>
    <lastmod>2026-09-02</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.4</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/contact"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/ranks</loc>
    <lastmod>2026-09-02</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.5</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/ranks"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/leaderboard</loc>
    <lastmod>2026-09-02</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/leaderboard"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/legal/privacy</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.3</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/legal/privacy"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/legal/terms</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.3</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/legal/terms"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/legal/offer</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.3</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/legal/offer"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/legal/cookies</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.3</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/legal/cookies"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/legal/security</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.3</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/legal/security"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/legal/fz152</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.3</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/legal/fz152"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/legal/age</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.3</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/legal/age"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/legal/ip</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.3</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/legal/ip"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/legal/changelog</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.3</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/legal/changelog"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/xss/python-flask-xss-stored-comments</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/xss/python-flask-xss-stored-comments"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Stored XSS в комментариях к товарам</image:title>
      <image:caption>Комментарии к товарам выводятся через |safe без санитизации. Укради сессию</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/xss/python-flask-xss-reflected</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/xss/python-flask-xss-reflected"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Reflected XSS в поиске магазина</image:title>
      <image:caption>Поисковый запрос выводится через |safe фильтр Jinja2 без экранирования. Выполни</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/xss/python-flask-xss-dom-fragment</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/xss/python-flask-xss-dom-fragment"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>DOM XSS через location.hash и innerHTML</image:title>
      <image:caption>Клиентский JavaScript читает location.hash и вставляет через innerHTML без санитизации. Выполни</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/xss/python-flask-xss-csp-nonce</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/xss/python-flask-xss-csp-nonce"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>XSS + обход CSP через unsafe-inline</image:title>
      <image:caption>Поисковый запрос выводится через |safe без экранирования, а CSP содержит unsafe-inline —</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/xss/python-flask-xss-attribute-context</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/xss/python-flask-xss-attribute-context"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>XSS через атрибут (javascript: URL)</image:title>
      <image:caption>XSS через javascript: URL-схему в атрибуте href. Jinja2 экранирует HTML-сущности, но не блокирует</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/ssti/python-flask-ssti-rce</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/ssti/python-flask-ssti-rce"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSTI: Report Template RCE</image:title>
      <image:caption>Пользовательский шаблон отчёта рендерится через render_template_string() — SSTI позволяет</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/ssti/python-flask-ssti-format-string</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/ssti/python-flask-ssti-format-string"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSTI: Format String Injection</image:title>
      <image:caption>Форма восстановления пароля использует str.format() с пользовательским шаблоном —</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/ssti/python-flask-ssti-blind</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/ssti/python-flask-ssti-blind"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Blind SSTI: Notification Templates</image:title>
      <image:caption>Админ-шаблон email-уведомлений рендерится через render_template_string() — слепая SSTI через time-based</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/ssti/python-flask-ssti-basic</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/ssti/python-flask-ssti-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSTI: User Greeting</image:title>
      <image:caption>Пользовательское приветствие рендерится через render_template_string() — SSTI позволяет читать</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/ssrf/python-flask-ssrf-redirect</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/ssrf/python-flask-ssrf-redirect"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSRF: Redirect Bypass</image:title>
      <image:caption>Обработчик загрузки аватара проверяет IP начального URL, но requests.get() автоматически</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/ssrf/python-flask-ssrf-cloud-metadata</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/ssrf/python-flask-ssrf-cloud-metadata"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSRF: Cloud Metadata Bypass</image:title>
      <image:caption>SSRF-защита проверяет is_loopback но не is_link_local — доступ к cloud metadata 169.254.169.254.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/ssrf/python-flask-ssrf-basic</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/ssrf/python-flask-ssrf-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSRF: Fetch Avatar</image:title>
      <image:caption>Обработчик загрузки аватара делает HTTP-запрос по пользовательскому URL без валидации —</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/sql-injection/python-flask-sqli-waf-bypass</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/sql-injection/python-flask-sqli-waf-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SQL Injection: WAF Bypass</image:title>
      <image:caption>Обход WAF с чёрным списком SQL-ключевых слов для эксплуатации SQL-инъекции в форме логина.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/sql-injection/python-flask-sqli-union</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/sql-injection/python-flask-sqli-union"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SQL Injection: UNION SELECT</image:title>
      <image:caption>Извлечение данных из БД через UNION SELECT в поиске каталога Flask-приложения.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/sql-injection/python-flask-sqli-second-order</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/sql-injection/python-flask-sqli-second-order"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SQL Injection: Second-Order</image:title>
      <image:caption>SQL-инъекция второго порядка: payload сохраняется при регистрации и срабатывает при</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/sql-injection/python-flask-sqli-blind-time</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/sql-injection/python-flask-sqli-blind-time"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SQL Injection: Time-based Blind</image:title>
      <image:caption>Извлечение данных через Time-based Blind SQLi в форме восстановления пароля Flask-приложения.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/sql-injection/python-flask-sqli-blind-boolean</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/sql-injection/python-flask-sqli-blind-boolean"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SQL Injection: Boolean-based Blind</image:title>
      <image:caption>Извлечение данных через Boolean-based Blind SQLi в эндпоинте проверки купонов.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/sql-injection/python-flask-sqli-basic</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/sql-injection/python-flask-sqli-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SQL Injection: Auth Bypass</image:title>
      <image:caption>Обход авторизации через SQL-инъекцию в форме логина Flask-приложения.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/race-condition/python-flask-promo-race</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/race-condition/python-flask-promo-race"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Promo Code Race</image:title>
      <image:caption>Состояние гонки при активации промокодов (Python).</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/path-traversal/python-flask-path-traversal-proc</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/path-traversal/python-flask-path-traversal-proc"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Path Traversal: /proc Leak</image:title>
      <image:caption>Обработчик скачивания файлов не блокирует /proc/self/environ — утечка секретов через</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/path-traversal/python-flask-path-traversal-bypass</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/path-traversal/python-flask-path-traversal-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Path Traversal: Normpath Bypass</image:title>
      <image:caption>Обработчик использует os.path.normpath() до конкатенации, что не предотвращает выход за</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/path-traversal/python-flask-path-traversal-basic</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/path-traversal/python-flask-path-traversal-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Path Traversal: Базовый обход директорий</image:title>
      <image:caption>Классическая уязвимость Path Traversal через os.path.join() без проверки выхода за пределы базовой</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/path-traversal/python-flask-path-traversal-absolute</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/path-traversal/python-flask-path-traversal-absolute"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Path Traversal: Absolute Path</image:title>
      <image:caption>Обработчик скачивания файлов проверяет только &#39;..&#39; в пути, но не блокирует абсолютные</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/auth-bypass/python-flask-jwt-weak-secret</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/auth-bypass/python-flask-jwt-weak-secret"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>JWT: Weak Secret</image:title>
      <image:caption>JWT подписан слабым секретом — подберите его через brute-force и подделайте токен</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/auth-bypass/python-flask-jwt-none-algorithm</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/auth-bypass/python-flask-jwt-none-algorithm"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>JWT: None Algorithm Attack</image:title>
      <image:caption>Сервер принимает JWT с alg:none и доверяет роли из claims — подделайте токен для получения прав</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/auth-bypass/python-flask-jwt-key-confusion</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/auth-bypass/python-flask-jwt-key-confusion"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>JWT: Key Confusion (RS256 to HS256)</image:title>
      <image:caption>Сервер подписывает JWT через RS256, но не проверяет алгоритм при валидации. Атакующий</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/info-disclosure/python-flask-info-error-message</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/info-disclosure/python-flask-info-error-message"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Information Disclosure: Утечка через Stack Trace</image:title>
      <image:caption>Ошибки сервера возвращают полные stack traces с путями файлов, SQL-схемой и переменными.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/info-disclosure/python-flask-info-debug-mode</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/info-disclosure/python-flask-info-debug-mode"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Information Disclosure: Flask Debug Mode</image:title>
      <image:caption>Flask запущен с debug=True. Через Werkzeug debugger можно получить переменные окружения.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/info-disclosure/python-flask-info-backup-files</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/info-disclosure/python-flask-info-backup-files"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Information Disclosure: Утечка через backup-файлы</image:title>
      <image:caption>Статическая директория содержит backup-файлы с конфиденциальными данными. Найдите</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/idor/python-flask-idor-vertical</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/idor/python-flask-idor-vertical"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>IDOR: Вертикальная эскалация привилегий</image:title>
      <image:caption>Админ-эндпоинты проверяют аутентификацию, но не роль пользователя.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/idor/python-flask-idor-uuid</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/idor/python-flask-idor-uuid"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>IDOR: Перебор заказов по последовательным ID</image:title>
      <image:caption>Заказы используют последовательные целочисленные ID без проверки владельца.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/idor/python-flask-idor-mass-assignment</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/idor/python-flask-idor-mass-assignment"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>IDOR: Mass Assignment — эскалация через JSON</image:title>
      <image:caption>API-эндпоинт обновления профиля принимает все JSON-поля, включая role.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/idor/python-flask-idor-basic</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/idor/python-flask-idor-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>IDOR: Доступ к чужому счёту</image:title>
      <image:caption>Эндпоинт просмотра счёта не проверяет владельца. Получи данные чужого счёта.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/file-upload/python-flask-file-upload-webshell</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/file-upload/python-flask-file-upload-webshell"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>File Upload: Webshell через загрузку в templates/</image:title>
      <image:caption>Загрузка документов сохраняет файлы в директорию templates/ без проверки содержимого.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/file-upload/python-flask-file-upload-content-type</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/file-upload/python-flask-file-upload-content-type"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>File Upload: обход проверки расширения через Content-Type</image:title>
      <image:caption>Загрузчик изображений проверяет расширение файла, но не его содержимое. HTML-файл,</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/file-upload/python-flask-file-upload-bypass</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/file-upload/python-flask-file-upload-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>File Upload: Path Traversal в имени файла</image:title>
      <image:caption>Загрузка аватара без санитизации имени файла позволяет перезаписать серверные</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/deserialization/python-flask-yaml-unsafe</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/deserialization/python-flask-yaml-unsafe"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Insecure Deserialization: YAML Unsafe Load</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/deserialization/python-flask-pickle-rce</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/deserialization/python-flask-pickle-rce"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Insecure Deserialization: Pickle RCE</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/deserialization/python-flask-deserialize-json-class</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/deserialization/python-flask-deserialize-json-class"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Insecure Deserialization: JSON Class Markers</image:title>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/csrf/python-flask-csrf-samesite</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/csrf/python-flask-csrf-samesite"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>CSRF: SameSite=Lax Bypass через GET-запрос (Flask)</image:title>
      <image:caption>Endpoint смены email доступен через GET. SameSite=Lax не защищает от top-level GET navigation — измени email admin</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/csrf/python-flask-csrf-referer-bypass</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/csrf/python-flask-csrf-referer-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>CSRF: Обход проверки Referer (Flask)</image:title>
      <image:caption>Приложение проверяет Referer как защиту от CSRF, но проверка некорректна — атакующий может</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/csrf/python-flask-csrf-json-api</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/csrf/python-flask-csrf-json-api"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>CSRF: JSON API без кастомного заголовка (Flask)</image:title>
      <image:caption>JSON API endpoint /api/profile не требует кастомного заголовка X-Requested-With. Смени пароль admin через</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/csrf/python-flask-csrf-basic</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/csrf/python-flask-csrf-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>CSRF: Несанкционированное действие через поддельный запрос (Flask)</image:title>
      <image:caption>Форма администратора не защищена CSRF-токеном. Заставь бота выполнить действие от имени</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/command-injection/python-flask-cmd-injection-eval</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/command-injection/python-flask-cmd-injection-eval"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Command Injection: eval() Injection</image:title>
      <image:caption>Калькулятор на e-commerce сайте вычисляет выражения через eval(), позволяя любому</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/command-injection/python-flask-cmd-injection-bypass</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/command-injection/python-flask-cmd-injection-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Command Injection: Обход Blacklist WAF</image:title>
      <image:caption>Функция ping защищена blacklist-фильтром, блокирующим пробелы и ключевые слова. Фильтр</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/command-injection/python-flask-cmd-injection-blind</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/command-injection/python-flask-cmd-injection-blind"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Command Injection: Слепая инъекция команд (Timing-based)</image:title>
      <image:caption>API сетевой диагностики выполняет команду shell, но не возвращает вывод. Уязвимость</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/auth-bypass/python-flask-auth-weak-password</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/auth-bypass/python-flask-auth-weak-password"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Слабая Парольная Политика</image:title>
      <image:caption>Регистрация принимает любой пароль без проверки сложности. Пароль администратора —</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/command-injection/python-flask-cmd-injection-basic</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/command-injection/python-flask-cmd-injection-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Command Injection: Базовая инъекция команд</image:title>
      <image:caption>Панель администратора содержит функцию ping, передающую ввод напрямую в os.popen() без</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/auth-bypass/python-flask-auth-timing-attack</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/auth-bypass/python-flask-auth-timing-attack"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Timing-атака на форму входа</image:title>
      <image:caption>Обработчик входа раскрывает существование пользователей через разницу во времени</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/auth-bypass/python-flask-auth-bruteforce</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/auth-bypass/python-flask-auth-bruteforce"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Брутфорс Формы Входа (Нет Rate Limiting)</image:title>
      <image:caption>Форма входа не ограничивает количество попыток, позволяя подобрать пароль</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/access-control/python-flask-acl-url-bypass</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/access-control/python-flask-acl-url-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Access Control: Обход проверки через регистр URL</image:title>
      <image:caption>Middleware проверяет доступ к /admin по точному совпадению. Обойдите проверку, изменив регистр</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/access-control/python-flask-acl-horizontal</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/access-control/python-flask-acl-horizontal"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Access Control: Горизонтальная эскалация через API</image:title>
      <image:caption>API-эндпоинт /api/users/&lt;id&gt;/notes не проверяет владельца. Получите заметки администратора.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/python/access-control/python-flask-acl-forced-browsing</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/python/access-control/python-flask-acl-forced-browsing"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Access Control: Forced Browsing — открытая админ-панель</image:title>
      <image:caption>Административные страницы доступны без аутентификации. Перейдите напрямую и получите</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/xss/php-xss-stored-comments</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/xss/php-xss-stored-comments"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Stored XSS в комментариях к товару</image:title>
      <image:caption>Комментарии к товарам выводятся без экранирования — Stored XSS позволяет украсть cookie</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/xss/php-xss-reflected</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/xss/php-xss-reflected"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Reflected XSS в поиске товаров</image:title>
      <image:caption>Поисковый запрос отображается на странице без экранирования, позволяя выполнить</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/xss/php-xss-dom-fragment</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/xss/php-xss-dom-fragment"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>DOM XSS через URL-фрагмент</image:title>
      <image:caption>JavaScript читает location.hash и вставляет значение через innerHTML — DOM XSS без участия сервера.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/xss/php-xss-attribute-context</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/xss/php-xss-attribute-context"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>XSS в HTML-атрибуте (Attribute Context)</image:title>
      <image:caption>Пользовательский URL выводится в атрибуте href без валидации схемы — javascript: выполняется</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/type-juggling/php-type-juggling-strcmp</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/type-juggling/php-type-juggling-strcmp"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Type Juggling: ошибочная интерпретация strcmp()</image:title>
      <image:caption>На PHP 8.2 эндпоинт /promo приводит ввод к строке, но принимает `strcmp(...) &lt; 1`: любой</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/type-juggling/php-type-juggling-json</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/type-juggling/php-type-juggling-json"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Type Juggling: JSON-аутентификация с loose comparison</image:title>
      <image:caption>JSON-API логина сравнивает пароль с хешем через loose == . В БД хранится хеш-строка вида 0e830...</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/type-juggling/php-type-juggling-basic</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/type-juggling/php-type-juggling-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Type Juggling: Magic Hash Collision</image:title>
      <image:caption>API-логин через токен использует loose comparison (==) между md5-хэшами. Magic hash вида 0e[0-9]+</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/ssti/php-ssti-twig</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/ssti/php-ssti-twig"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSTI: Twig createTemplate() Injection</image:title>
      <image:caption>Пользовательский ввод передаётся в Twig createTemplate(), что позволяет выполнить произвольный</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/ssti/php-ssti-basic</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/ssti/php-ssti-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSTI: Server-Side Template Injection via eval()</image:title>
      <image:caption>Greeting template executed via eval() allows arbitrary PHP code injection.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/ssrf/php-ssrf-redirect</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/ssrf/php-ssrf-redirect"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSRF через обход проверки IP с помощью HTTP-редиректа</image:title>
      <image:caption>Приложение проверяет IP адрес при первом запросе, но cURL автоматически следует</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/ssrf/php-ssrf-cloud-metadata</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/ssrf/php-ssrf-cloud-metadata"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSRF к облачным метаданным через обход проверки IP</image:title>
      <image:caption>Приложение блокирует только loopback-адреса, но не link-local 169.254.169.254 — атакующий читает</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/ssrf/php-ssrf-basic</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/ssrf/php-ssrf-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSRF через file_get_contents() в загрузке аватара</image:title>
      <image:caption>Приложение загружает аватар по URL без проверки — атакующий может обратиться к</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/sql-injection/php-sqli-waf-bypass</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/sql-injection/php-sqli-waf-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SQL Injection — обход WAF blacklist</image:title>
      <image:caption>WAF с blacklist-фильтром блокирует SQL-ключевые слова, но обходится через mixed case.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/sql-injection/php-sqli-union</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/sql-injection/php-sqli-union"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>UNION SQL Injection в поиске каталога</image:title>
      <image:caption>UNION-based SQL-инъекция через поиск товаров позволяет извлечь данные из таблицы</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/sql-injection/php-sqli-second-order</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/sql-injection/php-sqli-second-order"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Second-Order SQL Injection через профиль пользователя</image:title>
      <image:caption>Имя из БД подставляется в SQL через конкатенацию — Second-Order SQLi.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/sql-injection/php-sqli-blind-boolean</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/sql-injection/php-sqli-blind-boolean"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Boolean-based Blind SQL Injection через cookie купона</image:title>
      <image:caption>Значение купона из cookie подставляется в SQL-запрос без параметризации, позволяя извлечь</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/sql-injection/php-sqli-basic</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/sql-injection/php-sqli-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SQL Injection в форме входа</image:title>
      <image:caption>Обход аутентификации через SQL-инъекцию в форме логина.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/race-condition/php-promo-race</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/race-condition/php-promo-race"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Promo Code Race</image:title>
      <image:caption>Состояние гонки при активации промокодов (PHP).</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/path-traversal/php-path-traversal-bypass</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/path-traversal/php-path-traversal-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Path Traversal через обход нормализации пути</image:title>
      <image:caption>Нормализация пути применяется ДО конкатенации с базовым каталогом —</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/path-traversal/php-path-traversal-basic</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/path-traversal/php-path-traversal-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Path Traversal в загрузке файлов</image:title>
      <image:caption>Обход пути через параметр file в эндпоинте загрузки файлов (PHP).</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/path-traversal/php-path-traversal-absolute</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/path-traversal/php-path-traversal-absolute"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Path Traversal: абсолютные пути обходят blacklist</image:title>
      <image:caption>Сервер фильтрует &#39;..&#39; в запросах на скачивание, но не проверяет абсолютные пути — можно</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/auth-bypass/php-jwt-weak-secret</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/auth-bypass/php-jwt-weak-secret"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>JWT: Weak Secret</image:title>
      <image:caption>JWT подписан слабым секретом — подберите его через brute-force и подделайте токен</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/auth-bypass/php-jwt-key-confusion</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/auth-bypass/php-jwt-key-confusion"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>JWT: Key Confusion (RS256 to HS256)</image:title>
      <image:caption>Сервер подписывает JWT через RS256, но при валидации читает алгоритм из заголовка токена.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/auth-bypass/php-jwt-auth-bypass</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/auth-bypass/php-jwt-auth-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>JWT: None Algorithm Attack</image:title>
      <image:caption>Сервер принимает JWT с алгоритмом none — подделайте токен без подписи и получите права</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/idor/php-idor-vertical</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/idor/php-idor-vertical"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Vertical IDOR: Доступ к админ-панели без проверки роли</image:title>
      <image:caption>Admin-эндпоинты /admin/stats и /admin/users/delete защищены только аутентификацией, но не авторизацией.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/idor/php-idor-uuid</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/idor/php-idor-uuid"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>IDOR: Predictable Order IDs</image:title>
      <image:caption>Заказы используют последовательные integer ID. Атакующий перебирает ID и просматривает</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/idor/php-idor-basic</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/idor/php-idor-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>IDOR: Просмотр чужих инвойсов</image:title>
      <image:caption>Эндпоинт /invoice?id=N возвращает инвойс без проверки владельца. Атакующий перебирает ID и</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/file-upload/php-file-upload-htaccess</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/file-upload/php-file-upload-htaccess"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>.htaccess Upload — RCE через перезапись конфигурации Apache</image:title>
      <image:caption>Загрузка .htaccess позволяет выполнять PHP-код внутри файлов с произвольным расширением.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/file-upload/php-file-upload-content-type</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/file-upload/php-file-upload-content-type"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>File Upload: Content-Type Bypass</image:title>
      <image:caption>Загрузка файлов проверяет только расширение, но не содержимое. Атакующий может</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/file-upload/php-file-upload-bypass</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/file-upload/php-file-upload-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>File Upload: Path Traversal через имя файла</image:title>
      <image:caption>Загрузка аватара использует оригинальное имя файла без санитизации. Подмени filename в</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/file-inclusion/php-rfi-remote</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/file-inclusion/php-rfi-remote"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Remote File Inclusion через include() с allow_url_include</image:title>
      <image:caption>Параметр page передаётся в include() при включённом allow_url_include — атакующий загружает и</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/file-inclusion/php-lfi-php-filter</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/file-inclusion/php-lfi-php-filter"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>LFI через PHP stream wrappers (php://filter)</image:title>
      <image:caption>Наивная фильтрация ../ не блокирует php://filter — атакующий читает исходники PHP-файлов в base64.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/file-inclusion/php-lfi-basic</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/file-inclusion/php-lfi-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Local File Inclusion через include()</image:title>
      <image:caption>Параметр file передаётся напрямую в include() без валидации — атакующий читает произвольные</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/deserialization/php-deserialize-pop-chain</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/deserialization/php-deserialize-pop-chain"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Deserialization: POP-цепочка → RCE через file write</image:title>
      <image:caption>unserialize() без allowed_classes + классы с magic-методами (__destruct, __toString) позволяют собрать POP-цепочку,</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/deserialization/php-deserialize-phar</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/deserialization/php-deserialize-phar"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>PHP Deserialization: Phar RCE через Phar::getMetadata()</image:title>
      <image:caption>Эндпоинт просмотра инвойсов пытается «прочитать структурированные метаданные» и</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/deserialization/php-deserialize-basic</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/deserialization/php-deserialize-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Deserialization: unserialize() без allowed_classes</image:title>
      <image:caption>Cookie user_prefs десериализуется через unserialize() — подделайте объект с магическим __wakeup() и</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/csrf/php-csrf-samesite-get</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/csrf/php-csrf-samesite-get"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>CSRF: SameSite=Lax Bypass через GET-запрос</image:title>
      <image:caption>Критичное действие смены пароля выполняется через GET-запрос. SameSite=Lax не защищает от</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/csrf/php-csrf-json-api</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/csrf/php-csrf-json-api"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>CSRF: JSON API без кастомного заголовка (PHP)</image:title>
      <image:caption>JSON-endpoint /api/profile принимает state-changing запрос без проверки CSRF-токена и кастомного заголовка</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/csrf/php-csrf-basic</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/csrf/php-csrf-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>CSRF: Активация распродажи без токена</image:title>
      <image:caption>Админ-эндпоинт активации распродажи не проверяет CSRF-токен. Заставь бота выполнить</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/command-injection/php-cmd-injection-eval</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/command-injection/php-cmd-injection-eval"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Code Injection через eval() в PHP-калькуляторе</image:title>
      <image:caption>Пользовательский ввод передаётся в eval(), позволяя выполнить произвольный PHP-код.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/command-injection/php-cmd-injection-bypass</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/command-injection/php-cmd-injection-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Command Injection: обход blacklist-фильтра WAF</image:title>
      <image:caption>Админ-панель содержит функцию ping с blacklist-фильтром (пробел, ;, cat, flag). Фильтр обходится</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/command-injection/php-cmd-injection-basic</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/command-injection/php-cmd-injection-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Command Injection: Базовая инъекция команд</image:title>
      <image:caption>Панель администратора содержит функцию ping, передающую ввод напрямую в shell без</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/auth-bypass/php-auth-weak-password</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/auth-bypass/php-auth-weak-password"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Weak Password Policy</image:title>
      <image:caption>Регистрация принимает любой пароль без проверки сложности, что позволяет dictionary attack на</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/auth-bypass/php-auth-timing-attack</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/auth-bypass/php-auth-timing-attack"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Timing-атака на форму входа (PHP)</image:title>
      <image:caption>Обработчик входа раскрывает существование пользователей через разницу во времени</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/php/auth-bypass/php-auth-login-bruteforce</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/php/auth-bypass/php-auth-login-bruteforce"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Login Bruteforce</image:title>
      <image:caption>Эндпоинт логина не ограничивает количество попыток аутентификации, позволяя</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/xss/nodejs-xss-stored-comments</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/xss/nodejs-xss-stored-comments"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Stored XSS в комментариях к товарам (Node.js)</image:title>
      <image:caption>Комментарии к товарам рендерятся через nunjucks-фильтр |safe без санитайзинга. Укради сессию</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/xss/nodejs-xss-reflected</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/xss/nodejs-xss-reflected"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Reflected XSS в поиске Node.js</image:title>
      <image:caption>Поисковый запрос выводится через |safe фильтр Nunjucks без экранирования. Выполни</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/xss/nodejs-express-xss-dom-fragment</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/xss/nodejs-express-xss-dom-fragment"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>DOM XSS через location.hash и innerHTML (Express)</image:title>
      <image:caption>Клиентский JavaScript на странице каталога читает фрагмент URL (location.hash) и вставляет его</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/xss/nodejs-xss-csp-nonce</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/xss/nodejs-xss-csp-nonce"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>XSS + обход CSP через unsafe-inline (Node.js)</image:title>
      <image:caption>Поисковый запрос выводится через |safe без экранирования, а CSP содержит unsafe-inline —</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/xss/nodejs-xss-attribute-context</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/xss/nodejs-xss-attribute-context"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>XSS через атрибут (javascript: URL) в Node.js</image:title>
      <image:caption>XSS через javascript: URL-схему в атрибуте href. Nunjucks экранирует HTML-сущности, но не блокирует</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/ssti/nodejs-ssti-pug</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/ssti/nodejs-ssti-pug"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSTI: Pug Template Engine в Express</image:title>
      <image:caption>Профиль SecureShop рендерит пользовательское приветствие через pug.render() — SSTI в</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/ssti/nodejs-ssti-ejs</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/ssti/nodejs-ssti-ejs"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSTI: внедрение JavaScript-кода в EJS-шаблон</image:title>
      <image:caption>Server-Side Template Injection в Express + EJS: пользовательский ввод используется как сам EJS-шаблон, что</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/ssti/nodejs-ssti-basic</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/ssti/nodejs-ssti-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSTI: User Greeting</image:title>
      <image:caption>Пользовательское приветствие в SecureShop рендерится через nunjucks.renderString() — SSTI позволяет</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/ssrf/nodejs-ssrf-redirect</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/ssrf/nodejs-ssrf-redirect"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSRF: Обход проверки URL через HTTP-редирект в Node.js</image:title>
      <image:caption>Админ-форма импорта продуктового фида проверяет hostname URL и отвергает loopback и приватные</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/ssrf/nodejs-ssrf-cloud-metadata</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/ssrf/nodejs-ssrf-cloud-metadata"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSRF: эксфильтрация облачных credentials через метаданные</image:title>
      <image:caption>SSRF в /fetch-url без блокировки link-local адресов — IMDS отдаёт IAM credentials.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/ssrf/nodejs-ssrf-basic</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/ssrf/nodejs-ssrf-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSRF: Fetch Avatar в Express + better-sqlite3</image:title>
      <image:caption>Обработчик загрузки аватара в Express делает fetch по пользовательскому URL без валидации —</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/sql-injection/nodejs-sqli-waf-bypass</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/sql-injection/nodejs-sqli-waf-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SQL Injection: WAF Bypass</image:title>
      <image:caption>Обход WAF с чёрным списком SQL-ключевых слов для эксплуатации SQL-инъекции в форме логина</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/sql-injection/nodejs-sqli-union</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/sql-injection/nodejs-sqli-union"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SQL Injection: UNION SELECT через поиск каталога</image:title>
      <image:caption>Извлечение данных из таблицы users через UNION-based SQL injection в поиске каталога Express-приложения.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/sql-injection/nodejs-sqli-second-order</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/sql-injection/nodejs-sqli-second-order"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SQL Injection: Second-Order через сохранённый username профиля</image:title>
      <image:caption>Second-order SQL injection: вредоносный username безопасно сохраняется при регистрации, но</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/sql-injection/nodejs-sqli-blind-boolean</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/sql-injection/nodejs-sqli-blind-boolean"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SQL Injection: Boolean-based Blind (Node.js)</image:title>
      <image:caption>Извлечение секрета через Boolean-based Blind SQLi в эндпоинте проверки купонов.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/sql-injection/nodejs-sqli-basic</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/sql-injection/nodejs-sqli-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SQL Injection: Обход аутентификации в Express</image:title>
      <image:caption>Обход аутентификации через классическую SQL-инъекцию в форме логина Express + better-sqlite3.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/regex-dos/nodejs-redos-validation</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/regex-dos/nodejs-redos-validation"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>ReDoS: catastrophic backtracking в URL-валидаторе профиля</image:title>
      <image:caption>Express SecureShop валидирует адрес персонального сайта пользователя через регулярное</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/regex-dos/nodejs-redos-basic</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/regex-dos/nodejs-redos-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>ReDoS: catastrophic backtracking в проверке email профиля</image:title>
      <image:caption>Сервис ProfileGuard валидирует email пользователя на стороне сервера через регулярное</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/race-condition/nodejs-express-promo-race</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/race-condition/nodejs-express-promo-race"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Race Condition: Гонка при активации промокода в Express</image:title>
      <image:caption>Эндпоинт активации промокода в Express + better-sqlite3 содержит TOCTOU между проверкой счётчика и</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/prototype-pollution/nodejs-prototype-pollution-gadget</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/prototype-pollution/nodejs-prototype-pollution-gadget"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Prototype Pollution → RCE через гаджет в EJS</image:title>
      <image:caption>Админ-панель SecureShop рекурсивно сливает JSON-патч предпочтений с in-memory объектом, что</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/prototype-pollution/nodejs-prototype-pollution-dos</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/prototype-pollution/nodejs-prototype-pollution-dos"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Prototype Pollution: загрязнение Object.prototype приводит к DoS публичных эндпоинтов</image:title>
      <image:caption>Express-эндпоинт POST /profile/settings делает рекурсивный merge JSON-объекта в per-user настройки без</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/prototype-pollution/nodejs-prototype-pollution-basic</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/prototype-pollution/nodejs-prototype-pollution-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Prototype Pollution: загрязнение Object.prototype через recursive merge</image:title>
      <image:caption>Эндпоинт обновления пользовательских настроек в Express делает recursive merge тела запроса без</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/path-traversal/nodejs-path-traversal-bypass</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/path-traversal/nodejs-path-traversal-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Path Traversal: Обход naive blacklist-фильтра в Express</image:title>
      <image:caption>Эндпоинт скачивания файлов фильтрует путь через replace(&#39;../&#39;, &#39;&#39;) без флага /g — фильтр</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/path-traversal/nodejs-path-traversal-basic</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/path-traversal/nodejs-path-traversal-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Path Traversal: Базовый обход директорий в Express</image:title>
      <image:caption>Классическая Path Traversal в Express через fs.readFileSync(path.join(base, userInput)) без проверки выхода за</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/path-traversal/nodejs-path-traversal-absolute</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/path-traversal/nodejs-path-traversal-absolute"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Path Traversal: чтение произвольных файлов через абсолютный путь</image:title>
      <image:caption>Эндпоинт скачивания изображений склеивает имя файла с базовой директорией через</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/auth-bypass/nodejs-jwt-weak-secret</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/auth-bypass/nodejs-jwt-weak-secret"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>JWT: подбор слабого секрета и подделка admin-токена</image:title>
      <image:caption>Сервер подписывает JWT слабым секретом из словаря. Получив один валидный токен,</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/auth-bypass/nodejs-jwt-key-confusion</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/auth-bypass/nodejs-jwt-key-confusion"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>JWT: Key Confusion (RS256 to HS256) на jsonwebtoken</image:title>
      <image:caption>Express-приложение подписывает JWT через RS256 и публикует RSA публичный ключ через</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/auth-bypass/nodejs-jwt-auth-bypass</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/auth-bypass/nodejs-jwt-auth-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>JWT alg:none — обход аутентификации без подписи</image:title>
      <image:caption>Сервер принимает JWT с alg:none и доверяет роли из claims — подделайте токен для получения прав</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/idor/nodejs-idor-vertical</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/idor/nodejs-idor-vertical"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>IDOR: Вертикальная эскалация привилегий в Express</image:title>
      <image:caption>Админ-эндпоинты Express проверяют наличие сессии, но не роль пользователя. Любой</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/idor/nodejs-idor-uuid</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/idor/nodejs-idor-uuid"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>IDOR: предсказание UUID v1 по таймстампу</image:title>
      <image:caption>Заказы интернет-магазина идентифицируются UUID v1 (timestamp + MAC + clock_seq). Все заказы созданы</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/idor/nodejs-idor-basic</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/idor/nodejs-idor-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>IDOR: Доступ к чужому счёту в Express</image:title>
      <image:caption>Эндпоинт просмотра счёта в Express + better-sqlite3 не проверяет владельца ресурса. Получи доступ</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/file-upload/nodejs-file-upload-content-type</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/file-upload/nodejs-file-upload-content-type"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>File Upload: обход проверки через подделку Content-Type</image:title>
      <image:caption>Загрузчик изображений товара доверяет MIME-типу, который пришёл в заголовке Content-Type</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/file-upload/nodejs-file-upload-bypass</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/file-upload/nodejs-file-upload-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>File Upload: Path Traversal в имени файла (Express + busboy)</image:title>
      <image:caption>Загрузка аватара без санитизации имени файла позволяет перезаписать серверные</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/csrf/nodejs-csrf-samesite-get</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/csrf/nodejs-csrf-samesite-get"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>CSRF: SameSite=Lax обходится через GET (Express)</image:title>
      <image:caption>Эндпоинт смены email реализован через GET. SameSite=Lax не защищает top-level navigation — измени email</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/csrf/nodejs-express-csrf-json-api</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/csrf/nodejs-express-csrf-json-api"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>CSRF: JSON API без проверки происхождения запроса (Express)</image:title>
      <image:caption>JSON API /api/profile на Express принимает запросы без CSRF-токена и без проверки кастомного</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/csrf/nodejs-csrf-basic</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/csrf/nodejs-csrf-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>CSRF: Несанкционированное действие через поддельный запрос (Express)</image:title>
      <image:caption>Форма администратора не защищена CSRF-токеном. Заставь бота выполнить действие от имени</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/command-injection/nodejs-cmd-injection-eval</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/command-injection/nodejs-cmd-injection-eval"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Code Injection: eval() в Node.js калькуляторе</image:title>
      <image:caption>Веб-калькулятор вычисляет пользовательские выражения через eval(). Это даёт атакующему</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/command-injection/nodejs-cmd-injection-bypass</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/command-injection/nodejs-cmd-injection-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Command Injection: Обход Blacklist-фильтра в Node.js</image:title>
      <image:caption>Функция ping в админ-панели защищена blacklist-фильтром, блокирующим пробелы и ключевые</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/command-injection/nodejs-cmd-injection-blind</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/command-injection/nodejs-cmd-injection-blind"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Blind Command Injection: time-based инъекция без вывода в Node.js</image:title>
      <image:caption>API сетевой диагностики Express выполняет ping через child_process.exec, но вывод не возвращается</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/command-injection/nodejs-cmd-injection-basic</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/command-injection/nodejs-cmd-injection-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Command Injection: Базовая инъекция команд в Node.js</image:title>
      <image:caption>Панель администратора содержит инструмент диагностики сети, передающий ввод напрямую</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/auth-bypass/nodejs-auth-weak-password</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/auth-bypass/nodejs-auth-weak-password"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Слабая Парольная Политика</image:title>
      <image:caption>Регистрация принимает любой пароль без проверки сложности. Пароль администратора —</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/auth-bypass/nodejs-auth-timing-attack</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/auth-bypass/nodejs-auth-timing-attack"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Timing-атака на форму входа</image:title>
      <image:caption>Обработчик входа раскрывает существование пользователей через разницу во времени</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/auth-bypass/nodejs-auth-login-bruteforce</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/auth-bypass/nodejs-auth-login-bruteforce"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Брутфорс Формы Входа (Нет Rate Limiting) — Node.js</image:title>
      <image:caption>Форма входа Express-приложения не ограничивает количество попыток, позволяя подобрать</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/access-control/nodejs-acl-url-bypass</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/access-control/nodejs-acl-url-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Access Control: обход URL-проверки через вариации пути</image:title>
      <image:caption>Middleware проверяет доступ к /admin по точному совпадению префикса. Обойдите проверку,</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/access-control/nodejs-acl-horizontal</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/access-control/nodejs-acl-horizontal"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Access Control: Горизонтальная эскалация через API в Express</image:title>
      <image:caption>API-эндпоинт /api/users/:user_id/notes не проверяет владельца. Получите заметки администратора.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/nodejs/access-control/nodejs-acl-forced-browsing</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/nodejs/access-control/nodejs-acl-forced-browsing"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Access Control: Forced Browsing — скрытая админ-панель</image:title>
      <image:caption>Административные страницы доступны без аутентификации. Перейдите напрямую и получите</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/xss/golang-go-xss-stored-comments</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/xss/golang-go-xss-stored-comments"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Stored XSS в комментариях к товарам</image:title>
      <image:caption>Комментарии к товарам хранятся без санитаризации и отображаются как HTML. Укради сессию</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/xss/golang-go-xss-reflected</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/xss/golang-go-xss-reflected"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Reflected XSS в поиске магазина</image:title>
      <image:caption>Поисковый запрос отражается в HTML без экранирования. Выполни произвольный JS в</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/xss/golang-go-xss-dom-fragment</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/xss/golang-go-xss-dom-fragment"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>DOM XSS через URL-фрагмент (location.hash)</image:title>
      <image:caption>JavaScript на странице каталога читает location.hash и вставляет его в DOM через innerHTML. Укради</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/xss/golang-go-xss-csp-nonce</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/xss/golang-go-xss-csp-nonce"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>XSS при слабой CSP (unsafe-inline)</image:title>
      <image:caption>Reflected XSS эксплуатируется благодаря CSP с &#39;unsafe-inline&#39;. Исправление требует nonce-based CSP.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/xss/golang-go-xss-attribute-context</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/xss/golang-go-xss-attribute-context"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>XSS через атрибут (javascript: URL)</image:title>
      <image:caption>XSS через javascript: URL-схему в атрибуте href. Go html/template экранирует HTML, но пропускает опасные</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/websocket-security/golang-go-websocket-injection</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/websocket-security/golang-go-websocket-injection"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>WebSocket Message Injection (XSS via innerHTML)</image:title>
      <image:caption>WebSocket chat broadcasts unsanitized messages. Client renders via innerHTML, enabling XSS.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/websocket-security/golang-go-websocket-auth-bypass</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/websocket-security/golang-go-websocket-auth-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>WebSocket Security: Угон сокета (CSWSH)</image:title>
      <image:caption>Сервер открывает WebSocket-соединение для отправки приватных уведомлений, но забывает</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/ssti/golang-go-ssti-email</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/ssti/golang-go-ssti-email"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSTI Email: Инъекция шаблона в email-сообщение</image:title>
      <image:caption>SSTI-уязвимость: пользовательский ввод передаётся в template.Parse(), позволяя читать серверные</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/ssti/golang-go-ssti-basic</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/ssti/golang-go-ssti-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Basic SSTI: Кастомное приветствие</image:title>
      <image:caption>Утечка конфиденциальных данных из контекста страницы через небезопасную обработку</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/ssti/golang-go-ssti-advanced</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/ssti/golang-go-ssti-advanced"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Advanced SSTI: Вызов методов и доступ к контексту</image:title>
      <image:caption>Эксплуатация SSTI через вызов методов объектов в контексте шаблона.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/ssrf/golang-go-ssrf-redirect</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/ssrf/golang-go-ssrf-redirect"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSRF Redirect: Обход валидации через HTTP-редирект</image:title>
      <image:caption>SSRF-уязвимость: валидация URL обходится через HTTP-редирект на внутренний адрес.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/ssrf/golang-go-ssrf-cloud-metadata</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/ssrf/golang-go-ssrf-cloud-metadata"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SSRF Cloud Metadata: Доступ к метаданным облака</image:title>
      <image:caption>SSRF-уязвимость: неполная фильтрация IP позволяет обратиться к link-local адресу облачных</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/ssrf/golang-go-ssrf-bypass</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/ssrf/golang-go-ssrf-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Bypass SSRF: Обход фильтров хоста</image:title>
      <image:caption>SSRF с обходом слабого фильтра хоста в URL и эксплуатация через альтернативные IP-адреса.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/ssrf/golang-go-ssrf-basic</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/ssrf/golang-go-ssrf-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Basic SSRF: Доступ к админке</image:title>
      <image:caption>Простая SSRF-уязвимость, позволяющая получить доступ к внутренним ресурсам сервера.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/sql-injection/golang-go-sqli-waf-bypass</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/sql-injection/golang-go-sqli-waf-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SQL Injection: Обход WAF через mixed case</image:title>
      <image:caption>Case-sensitive blacklist SQL keywords обходится через смешанный регистр (uNiOn, sElEcT)</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/sql-injection/golang-go-sqli-second-order</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/sql-injection/golang-go-sqli-second-order"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SQL Injection: Second-Order (хранимая инъекция)</image:title>
      <image:caption>Payload сохраняется в БД через безопасный INSERT, но выполняется в другом запросе через</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/sql-injection/golang-go-sqli-union</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/sql-injection/golang-go-sqli-union"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Union-Based SQL Injection</image:title>
      <image:caption>Получение пароля администратора с использованием UNION SELECT</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/sql-injection/golang-go-sqli-blind-time</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/sql-injection/golang-go-sqli-blind-time"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Time-Based Blind SQL Injection</image:title>
      <image:caption>Эксплуатация слепой SQL-инъекции, основанной на задержках времени ответа (Time-Based) в SQLite.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/sql-injection/golang-go-sqli-blind-boolean</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/sql-injection/golang-go-sqli-blind-boolean"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Blind Boolean SQL Injection</image:title>
      <image:caption>Слепая Boolean-based SQL-инъекция через Cookie купона</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/sql-injection/golang-go-sqli-basic</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/sql-injection/golang-go-sqli-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SQL Injection (Auth Bypass)</image:title>
      <image:caption>Обход авторизации с использованием SQL Injection</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/race-condition/golang-go-race-condition-basic</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/race-condition/golang-go-race-condition-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Promo Code Race</image:title>
      <image:caption>Состояние гонки при активации промокодов.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/race-condition/golang-go-race-balance</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/race-condition/golang-go-race-balance"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Race Condition: Double-spend баланса</image:title>
      <image:caption>Race condition: чтение и списание баланса без транзакции позволяет двойную трату при</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/path-traversal/golang-go-path-traversal-proc</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/path-traversal/golang-go-path-traversal-proc"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Path Traversal (Чтение окружения)</image:title>
      <image:caption>Выход из каталога изображений и чтение окружения процесса через procfs.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/path-traversal/golang-go-path-traversal-double-encode</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/path-traversal/golang-go-path-traversal-double-encode"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Path Traversal через двойное URL-кодирование</image:title>
      <image:caption>Обработчик скачивания файлов применяет filepath.Clean ДО URL-декодирования. Двойное</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/path-traversal/golang-go-path-traversal-bypass</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/path-traversal/golang-go-path-traversal-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Path Traversal (Иллюзия filepath.Clean)</image:title>
      <image:caption>Обход неумелого использования функции filepath.Clean.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/path-traversal/golang-go-path-traversal-basic</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/path-traversal/golang-go-path-traversal-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Path Traversal (Базовый)</image:title>
      <image:caption>Классическая уязвимость Path Traversal через os.Open.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/path-traversal/golang-go-path-traversal-absolute</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/path-traversal/golang-go-path-traversal-absolute"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Path Traversal через абсолютный путь</image:title>
      <image:caption>Обработчик скачивания файлов проверяет только &#39;..&#39; в пути, но не блокирует абсолютные</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/auth-bypass/golang-go-jwt-weak-secret</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/auth-bypass/golang-go-jwt-weak-secret"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>JWT: Подбор слабого секретного ключа</image:title>
      <image:caption>Приложение подписывает JWT токеном HMAC-SHA256 со слабым ключом. Подбери секрет и подделай</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/auth-bypass/golang-go-jwt-key-confusion</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/auth-bypass/golang-go-jwt-key-confusion"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>JWT Key Confusion (RS256 to HS256)</image:title>
      <image:caption>JWT RS256/HS256 key confusion: the server exposes the public key and doesn&#39;t enforce the signing algorithm, allowing token forgery via algorithm switch.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/auth-bypass/golang-go-jwt-auth-bypass</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/auth-bypass/golang-go-jwt-auth-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>JWT Authentication: Взлом слабой криптографии</image:title>
      <image:caption>В этой лаборатории сервер использует JWT для авторизации, но совершает сразу две</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/info-disclosure/golang-go-info-error-message</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/info-disclosure/golang-go-info-error-message"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Утечка данных через сообщения об ошибках</image:title>
      <image:caption>Подробные сообщения об ошибках раскрывают структуру БД</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/info-disclosure/golang-go-info-debug-endpoint</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/info-disclosure/golang-go-info-debug-endpoint"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Information Disclosure: Открытый debug-эндпоинт</image:title>
      <image:caption>Debug-эндпоинт раскрывает переменные окружения и список пользователей без</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/info-disclosure/golang-go-info-backup-files</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/info-disclosure/golang-go-info-backup-files"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Information Disclosure: Утечка через файлы бэкапов</image:title>
      <image:caption>FileServer раздаёт .env и .bak файлы из корня проекта</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/idor/golang-go-idor-vertical</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/idor/golang-go-idor-vertical"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>IDOR: Вертикальная эскалация привилегий</image:title>
      <image:caption>Админ-эндпоинты /admin/stats и /admin/users/delete проверяют аутентификацию, но не авторизацию. Любой</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/idor/golang-go-idor-uuid</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/idor/golang-go-idor-uuid"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>IDOR: Перебор заказов по последовательным ID</image:title>
      <image:caption>Заказы используют последовательные целочисленные ID. Эндпоинт /order/{id} не проверяет</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/idor/golang-go-idor-mass-assignment</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/idor/golang-go-idor-mass-assignment"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>IDOR: Mass Assignment — эскалация привилегий через профиль</image:title>
      <image:caption>Эндпоинт обновления профиля принимает JSON и записывает все поля, включая role. Отправь</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/idor/golang-go-idor-basic</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/idor/golang-go-idor-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>IDOR: Доступ к чужому счету</image:title>
      <image:caption>Эндпоинт просмотра счета не проверяет владельца. Получи флаг из счета другого</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/file-upload/golang-go-file-upload-double-ext</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/file-upload/golang-go-file-upload-double-ext"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>File Upload Bypass через двойное расширение</image:title>
      <image:caption>Обработчик загрузки использует filepath.Ext() для проверки расширения, но эта функция</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/file-upload/golang-go-file-upload-content-type</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/file-upload/golang-go-file-upload-content-type"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>File Upload Bypass через подмену Content-Type</image:title>
      <image:caption>Обработчик загрузки файлов проверяет только расширение (.jpg, .png, .gif), но не реальное</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/file-upload/golang-go-file-upload-bypass</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/file-upload/golang-go-file-upload-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>File Upload: Обход расширений и Path Traversal</image:title>
      <image:caption>Сервер принимает файлы с расширением .jpg, но слепо доверяет имени файла из Content-Disposition.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/csrf/golang-go-csrf-samesite-get</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/csrf/golang-go-csrf-samesite-get"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>CSRF: SameSite=Lax Bypass через GET-запрос</image:title>
      <image:caption>Мутирующий эндпоинт смены email реализован через GET. SameSite=Lax не защищает от top-level</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/csrf/golang-go-csrf-referer-bypass</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/csrf/golang-go-csrf-referer-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>CSRF: Обход проверки Referer-заголовка</image:title>
      <image:caption>Приложение использует проверку заголовка Referer вместо CSRF-токена. Обойди проверку и</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/csrf/golang-go-csrf-json-api</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/csrf/golang-go-csrf-json-api"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>CSRF: Атака через JSON API без кастомных заголовков</image:title>
      <image:caption>JSON API эндпоинт не требует кастомных заголовков. Используй CSRF для смены пароля admin через</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/csrf/golang-go-csrf-basic</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/csrf/golang-go-csrf-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>CSRF: Несанкционированное действие через поддельный запрос</image:title>
      <image:caption>Форма администратора не защищена CSRF-токеном. Заставь бота выполнить действие от имени</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/command-injection/golang-go-cmd-injection-bypass</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/command-injection/golang-go-cmd-injection-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Bypass Filters: Строгий WAF</image:title>
      <image:caption>Обход фильтрации пробелов и черного списка команд для RCE.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/command-injection/golang-go-cmd-injection-blind</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/command-injection/golang-go-cmd-injection-blind"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Blind Command Injection через сетевую диагностику</image:title>
      <image:caption>Обработчик сетевой диагностики передаёт пользовательский ввод в sh -c без фильтрации.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/command-injection/golang-go-cmd-injection-basic</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/command-injection/golang-go-cmd-injection-basic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Basic Command Injection: Сетевой пинг</image:title>
      <image:caption>Простая OS Command Injection через инструмент сетевой диагностики в админ-панели.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/command-injection/golang-go-cmd-injection-argument</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/command-injection/golang-go-cmd-injection-argument"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Argument Injection в архиваторе файлов</image:title>
      <image:caption>Обработчик архивации файлов использует exec.Command без shell, но не фильтрует аргументы,</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/business-logic/golang-go-biz-price-manipulation</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/business-logic/golang-go-biz-price-manipulation"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Business Logic: Подмена цены в форме</image:title>
      <image:caption>Checkout читает цену товара из скрытого поля формы вместо базы данных, позволяя подменить</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/business-logic/golang-go-biz-negative-quantity</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/business-logic/golang-go-biz-negative-quantity"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Business Logic: Отрицательное количество товаров</image:title>
      <image:caption>Корзина магазина принимает отрицательное количество товаров, позволяя получить</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/business-logic/golang-go-biz-coupon-stacking</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/business-logic/golang-go-biz-coupon-stacking"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Business Logic: Стек купонов</image:title>
      <image:caption>Система купонов позволяет применять несколько купонов одновременно, суммируя скидки</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/auth-bypass/golang-go-auth-weak-password</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/auth-bypass/golang-go-auth-weak-password"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Слабые Пароли (Нет Валидации Сложности)</image:title>
      <image:caption>Форма регистрации принимает любые пароли, включая однозначные. Аккаунт admin защищён</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/auth-bypass/golang-go-auth-timing-attack</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/auth-bypass/golang-go-auth-timing-attack"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Timing Attack: Перечисление Пользователей</image:title>
      <image:caption>Обработчик логина имеет разное время ответа для существующих и несуществующих</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/auth-bypass/golang-go-auth-login-bruteforce</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/auth-bypass/golang-go-auth-login-bruteforce"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Брутфорс Формы Входа (Нет Rate Limiting)</image:title>
      <image:caption>Форма входа не ограничивает количество попыток, позволяя подобрать пароль</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/auth-bypass/golang-go-auth-insecure-reset</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/auth-bypass/golang-go-auth-insecure-reset"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Небезопасный Сброс Пароля (IDOR)</image:title>
      <image:caption>Форма сброса пароля принимает user_id из клиента, позволяя атакующему сбросить пароль</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/auth-bypass/golang-go-auth-cookies-bruteforce</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/auth-bypass/golang-go-auth-cookies-bruteforce"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Предсказуемые Токены Сессии (MD5)</image:title>
      <image:caption>Сессионные токены генерируются через MD5(username), что позволяет предсказать токен</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/api-security/golang-go-api-rate-limit</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/api-security/golang-go-api-rate-limit"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>API Rate Limit: Brute-force логина без ограничений</image:title>
      <image:caption>Отсутствие rate limiting на эндпоинте логина позволяет brute-force пароля администратора.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/api-security/golang-go-api-mass-assignment</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/api-security/golang-go-api-mass-assignment"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>API Mass Assignment: Повышение привилегий через PUT</image:title>
      <image:caption>encoding/json декодирует PUT-запрос в map[string]interface{}, а self-service switch ошибочно разрешает role наряду с</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/access-control/golang-go-acl-referer-bypass</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/access-control/golang-go-acl-referer-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Referer Bypass: обход контроля доступа через подмену заголовка</image:title>
      <image:caption>API-эндпоинт /api/admin/users проверяет заголовок Referer вместо роли пользователя. Атакующий</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/access-control/golang-go-acl-url-bypass</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/access-control/golang-go-acl-url-bypass"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>URL Case Bypass: обход проверки пути с помощью регистра</image:title>
      <image:caption>Middleware проверяет путь с учётом регистра (strings.HasPrefix). Замена /admin на /Admin позволяет обойти</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/access-control/golang-go-acl-forced-browsing</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/access-control/golang-go-acl-forced-browsing"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Forced Browsing: доступ к скрытому эндпоинту экспорта</image:title>
      <image:caption>Административный эндпоинт /admin/export зарегистрирован без проверки роли — любой</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/access-control/golang-go-acl-horizontal</loc>
    <lastmod>2026-10-24</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/access-control/golang-go-acl-horizontal"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Horizontal Privilege Escalation: изменение профиля другого пользователя</image:title>
      <image:caption>Обработчик обновления аватара принимает user_id из формы вместо сессии -- атакующий может</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/labs/golang/api-security/golang-go-api-bola</loc>
    <lastmod>2026-10-23</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/labs/golang/api-security/golang-go-api-bola"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>API BOLA: Доступ к чужим заказам</image:title>
      <image:caption>Broken Object Level Authorization (BOLA): API возвращает заказы любого пользователя по ID без проверки</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/devsecops-supply-chain</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/devsecops-supply-chain"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Supply Chain Security: SBOM, подписи, provenance</image:title>
      <image:caption>Путь для опытных разработчиков и DevOps. Модель угроз цепочки поставки (кейс xz, EU CRA, SLSA, NIST</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/devsecops-runtime-detection</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/devsecops-runtime-detection"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Runtime Detection: Falco, eBPF, Sigma</image:title>
      <image:caption>Обнаружение атак в работающем кластере: то, что проскакивает мимо CI-гейтов —</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/devsecops-policy-as-code</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/devsecops-policy-as-code"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Policy as Code: Rego, Conftest, Kyverno</image:title>
      <image:caption>Политики безопасности как код: от Rego и Conftest в CI до admission-контроля Kyverno в Kubernetes-кластере.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/python-xss</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/python-xss"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Python XSS: Межсайтовый скриптинг в Flask</image:title>
      <image:caption>Полный маршрут по XSS-уязвимостям в Python/Flask/Jinja2. От Reflected до DOM-based, от |safe фильтра до CSP с nonce.</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/python-ssti</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/python-ssti"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Python SSTI: от источника шаблона к доказанному риску</image:title>
      <image:caption>Практический маршрут о границе между template source и данными: Jinja2, Python format strings, наблюдаемое</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/python-ssrf</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/python-ssrf"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Python SSRF: Подделка серверных запросов в Flask</image:title>
      <image:caption>Маршрут по SSRF-уязвимостям в Python/Flask. От базового requests.get до cloud metadata через redirect. 3 лабы с URL</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/python-sqli</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/python-sqli"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Python SQL Injection: От основ до Second-Order</image:title>
      <image:caption>Полный маршрут по SQL-инъекциям в Python/Flask. Изучите механику атак от простого обхода</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/python-path-traversal</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/python-path-traversal"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Python Path Traversal: Обход каталогов в Flask</image:title>
      <image:caption>Маршрут по Path Traversal в Python/Flask. От базового ../ до /proc доступа. 4 лабы с os.path, pathlib и</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/python-jwt</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/python-jwt"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Python JWT: проверка токенов и границы доверия</image:title>
      <image:caption>Проверка JWT в Python/Flask на примерах None Algorithm, Weak Secret и Key Confusion. Три лаборатории связывают</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/python-information-disclosure</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/python-information-disclosure"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Python Information Disclosure: Утечка информации в Flask</image:title>
      <image:caption>Маршрут по утечкам информации в Python/Flask. Изучите опасность debug-режима, stack traces и</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/python-idor</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/python-idor"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Python Broken Access Control: IDOR, роли и свойства во Flask</image:title>
      <image:caption>Практический маршрут о серверной авторизации во Flask: доступ к объектам,</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/python-file-upload</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/python-file-upload"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Python File Upload: Атаки через загрузку файлов</image:title>
      <image:caption>Полный маршрут по уязвимостям загрузки файлов в Python/Flask. Изучите обход расширений,</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/python-deserialization</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/python-deserialization"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Python Deserialization: данные, инструкции и границы доверия</image:title>
      <image:caption>Практический маршрут о том, почему одни и те же bytes становятся данными или инструкциями</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/python-csrf</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/python-csrf"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Python CSRF: Межсайтовая подделка запросов в Flask</image:title>
      <image:caption>Маршрут по CSRF-уязвимостям в Python/Flask. От базовой подделки форм до JSON API CSRF. 4 лабы с Flask-WTF,</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/python-command-injection</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/python-command-injection"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Python Command Injection: Инъекция команд в Flask</image:title>
      <image:caption>Маршрут по инъекциям системных команд в Python/Flask. От os.system() до eval(), от фильтр-байпасов до</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/python-auth</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/python-auth"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Python Auth Security: Защита аутентификации</image:title>
      <image:caption>Полный маршрут по уязвимостям аутентификации в Python/Flask. Изучите атаки brute force, слабые</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/python-access-control</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/python-access-control"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Python Access Control: Контроль доступа в Flask</image:title>
      <image:caption>Полный маршрут по уязвимостям контроля доступа в Python/Flask. Изучите Forced Browsing,</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/php-xss</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/php-xss"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>PHP XSS: Reflected, Stored, DOM и Attribute Context</image:title>
      <image:caption>Полный маршрут по межсайтовому скриптингу (XSS) в PHP Native. Разберём почему PHP не имеет</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/php-type-juggling</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/php-type-juggling"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>PHP Type Juggling: от происхождения значения до безопасного контракта</image:title>
      <image:caption>Практический маршрут по PHP 8.2 о том, как транспорт сохраняет или меняет тип, как loose</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/php-ssti</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/php-ssti"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>PHP SSTI: граница между шаблоном и данными</image:title>
      <image:caption>Практический маршрут о том, как недоверенная строка становится исполняемой</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/php-ssrf</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/php-ssrf"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>PHP SSRF: file_get_contents, cURL и Cloud Metadata</image:title>
      <image:caption>Маршрут по Server-Side Request Forgery в PHP Native. Разберём file_get_contents() с URL, cURL-запросы, allow_url_fopen,</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/php-sqli</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/php-sqli"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>PHP SQL Injection: От основ до Second-Order</image:title>
      <image:caption>Фундаментальный маршрут по SQL-инъекциям в PHP Native. Изучите историю самой массовой</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/php-path-traversal</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/php-path-traversal"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>PHP Path Traversal: include, fopen и обходы</image:title>
      <image:caption>Маршрут по Path Traversal в PHP Native. Разберём уязвимости include, fopen, file_get_contents с пользовательским</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/php-jwt</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/php-jwt"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>PHP JWT Security: None Algorithm, Weak Secret и Key Confusion</image:title>
      <image:caption>Углублённый маршрут по безопасности JWT в PHP. Изучите структуру JWT, библиотеку firebase/php-jwt,</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/php-idor</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/php-idor"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>PHP IDOR: Horizontal, UUID и Vertical Privilege Escalation</image:title>
      <image:caption>Маршрут по Insecure Direct Object Reference в PHP Native. Разберём разницу между AuthN и AuthZ, горизонтальное</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/php-file-upload</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/php-file-upload"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>PHP File Upload: Webshell, .htaccess и Content-Type Spoofing</image:title>
      <image:caption>Маршрут по безопасности загрузки файлов в PHP. Изучите $_FILES, move_uploaded_file, атаки через webshell,</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/php-file-inclusion</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/php-file-inclusion"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>PHP File Inclusion: LFI, php://filter и RFI</image:title>
      <image:caption>Углублённый маршрут по уязвимостям включения файлов в PHP. Изучите механику include/require,</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/php-deserialization</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/php-deserialization"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>PHP Deserialization: unserialize, POP-цепочки и phar://</image:title>
      <image:caption>Углублённый маршрут по десериализации в PHP — самой PHP-специфичной уязвимости. Изучите</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/php-csrf</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/php-csrf"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>PHP CSRF: Токены, SameSite и JSON API</image:title>
      <image:caption>Маршрут по Cross-Site Request Forgery в PHP Native. Разберём механику CSRF-атак на PHP-сессии, защиту через</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/php-command-injection</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/php-command-injection"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>PHP Command Injection: system(), exec() и eval()</image:title>
      <image:caption>Маршрут по инъекциям команд ОС и кода в PHP Native. Разберём все функции выполнения команд</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/php-auth</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/php-auth"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>PHP Authentication: Brute Force, слабые пароли и Timing-атаки</image:title>
      <image:caption>Маршрут по безопасности аутентификации в PHP. Изучите session_start, password_hash/verify, атаки</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/nodejs-xss</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/nodejs-xss"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Node.js XSS: контексты вывода и защита</image:title>
      <image:caption>Разберите reflected, stored и DOM-based XSS в Node.js/Express, проследите путь данных и обоснуйте выбор</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/nodejs-ssti</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/nodejs-ssti"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Node.js SSTI: EJS, Nunjucks и Pug</image:title>
      <image:caption>Практический маршрут о единой границе доверия в трёх Node.js-шаблонизаторах. Вы</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/nodejs-ssrf</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/nodejs-ssrf"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Node.js SSRF: От fetch до Cloud Metadata</image:title>
      <image:caption>Маршрут по Server-Side Request Forgery в Node.js/Express. Разберите три возрастающих класса обхода на</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/nodejs-sqli</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/nodejs-sqli"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Node.js SQL Injection: От основ до WAF Bypass</image:title>
      <image:caption>Маршрут по SQL-инъекциям в Node.js/Express. Пять практических лабораторий используют Express и</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/nodejs-regex-dos</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/nodejs-regex-dos"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Node.js ReDoS: Event Loop Blocking и Catastrophic Backtracking</image:title>
      <image:caption>Маршрут по Regular Expression Denial of Service (ReDoS) в Node.js и Express. Вы научитесь распознавать</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/nodejs-prototype-pollution</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/nodejs-prototype-pollution"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Node.js Prototype Pollution: Цепочка прототипов, гаджеты и DoS</image:title>
      <image:caption>Глубокое погружение в server-side Prototype Pollution общего Object.prototype в пределах одного JavaScript realm. Вы</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/nodejs-path-traversal</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/nodejs-path-traversal"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Node.js Path Traversal: От ../ до Defense-in-Depth</image:title>
      <image:caption>Фундаментальный маршрут по Directory Traversal в Node.js/Express. Изучите три варианта атаки (базовый</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/nodejs-jwt</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/nodejs-jwt"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Node.js JWT Security: None Algorithm, Weak Secret и Key Confusion</image:title>
      <image:caption>Полное руководство по безопасности JSON Web Token в Node.js-приложениях. Вы изучите структуру JWT,</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/nodejs-idor</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/nodejs-idor"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Node.js IDOR: От Sequential ID до Role Bypass</image:title>
      <image:caption>Маршрут по object-level IDOR/BOLA и function-level BFLA в Node.js/Express. Изучите горизонтальный доступ к чужим</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/nodejs-file-upload</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/nodejs-file-upload"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Node.js File Upload: Extension Bypass, MIME Spoofing и Defense-in-Depth</image:title>
      <image:caption>Маршрут по безопасной загрузке файлов в Express-приложениях. Вы разберёте обходы проверки</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/nodejs-csrf</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/nodejs-csrf"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Node.js CSRF: От основ до JSON API</image:title>
      <image:caption>Маршрут по Cross-Site Request Forgery в Node.js/Express. Изучите механику CSRF-атак, обход SameSite cookies и защиту</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/nodejs-command-injection</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/nodejs-command-injection"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Node.js Command Injection: От exec до eval</image:title>
      <image:caption>Маршрут по инъекциям команд в Node.js/Express. Изучите child_process.exec, обход фильтров, blind injection и</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/nodejs-auth</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/nodejs-auth"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Node.js Auth Security: Brute Force, Weak Passwords и Timing Attacks</image:title>
      <image:caption>Теория разбирает express-rate-limit, zxcvbn, crypto.timingSafeEqual и dummy-bcrypt equalization. Brute-force lab проверяет per-IP rate</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/nodejs-access-control</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/nodejs-access-control"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Node.js Access Control: RBAC, IDOR и Defense-in-Depth в Express</image:title>
      <image:caption>Фундаментальный маршрут по контролю доступа в Node.js на Express. Изучите Forced Browsing к</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/go-xss</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/go-xss"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Go XSS Security: От основ до CSP</image:title>
      <image:caption>Глубокое погружение в Cross-Site Scripting (XSS) в Go-приложениях. Вы научитесь находить и</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/go-websocket</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/go-websocket"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Go WebSocket Security: от перехвата сессий до инъекций в сообщения</image:title>
      <image:caption>Полное погружение в безопасность WebSocket-соединений в Go: CSWSH (Cross-Site WebSocket Hijacking), обход Origin,</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/go-upload</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/go-upload"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Go File Upload Security: от загрузки картинок до захвата сервера</image:title>
      <image:caption>Полное погружение в безопасность загрузки файлов в Go: границы multipart-парсинга, обход</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/go-ssti</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/go-ssti"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Go SSTI Security: от недоверенного шаблона до безопасного рендеринга</image:title>
      <image:caption>Разбираемся, как недоверенный текст становится кодом шаблона, чем SSTI отличается от XSS,</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/go-ssrf</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/go-ssrf"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Go SSRF Security: От локальной сети до Cloud Metadata</image:title>
      <image:caption>Глубокое погружение в Server-Side Request Forgery (SSRF) в Go-приложениях. Вы научитесь находить SSRF,</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/go-sqli</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/go-sqli"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>SQL-инъекции в Go: эксплуатация и защита</image:title>
      <image:caption>Маршрут среднего уровня: механика SQL-инъекций и защита, закреплённые в шести</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/go-race</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/go-race"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Go Race Conditions: от горутин до инвариантов БД</image:title>
      <image:caption>Путь разделяет гонки данных в памяти Go, логические TOCTOU и аномалии БД. Вы воспроизведёте</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/go-path-traversal</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/go-path-traversal"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Go Path Traversal Security: От чтения файлов до /proc/self/environ</image:title>
      <image:caption>Глубокое погружение в Path Traversal в Go-приложениях. Вы научитесь находить и</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/go-jwt-security</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/go-jwt-security"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>JWT &amp; Security Token в Go: Разоблачение магии</image:title>
      <image:caption>JWT — это популярно, но крайне опасно в неумелых руках. Изучите, как злоумышленники</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/go-information-disclosure</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/go-information-disclosure"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Go Information Disclosure: Утечки данных через ошибки и конфигурацию</image:title>
      <image:caption>Изучаем утечки информации в Go-приложениях — debug-эндпоинты в продакшене, verbose error messages со</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/go-idor</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/go-idor"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Go Broken Access Control: от IDOR/BOLA до BFLA и BOPLA</image:title>
      <image:caption>Broken Access Control в Go с историческим фокусом на IDOR. Путь связывает AuthN с явной политикой</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/go-csrf</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/go-csrf"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Go CSRF Security: От подделки запросов до обхода SameSite</image:title>
      <image:caption>Глубокое погружение в Cross-Site Request Forgery (CSRF) в Go-приложениях. Вы научитесь находить и</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/go-command-injection</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/go-command-injection"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Go Command Injection: от границы данных к безопасному запуску процессов</image:title>
      <image:caption>Глубокое погружение в Command Injection в Go-приложениях. Вы научитесь находить и</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/go-business-logic</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/go-business-logic"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Go Business Logic: Уязвимости в бизнес-логике приложений</image:title>
      <image:caption>Глубокое погружение в уязвимости бизнес-логики Go-приложений. Вы научитесь находить и</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/go-auth</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/go-auth"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Безопасность аутентификации в Go</image:title>
      <image:caption>Глубокий маршрут по защите пользовательских данных и механизмов входа. От основ</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/go-api</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/go-api"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Go API Security: OWASP API Top 10 на практике</image:title>
      <image:caption>Полное погружение в безопасность REST API на Go: Mass Assignment, BOLA, Rate Limiting. Вы изучите OWASP API Top 10,</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/go-access-control</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/go-access-control"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Go Access Control: От Forced Browsing до обхода URL</image:title>
      <image:caption>Глубокое погружение в уязвимости контроля доступа в Go-приложениях. Вы научитесь</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/paths/getting-started</loc>
    <lastmod>2026-10-25</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.7</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/paths/getting-started"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
      <image:title>Старт: платформа и инструменты пентестера</image:title>
      <image:caption>С чего начать на HackAndFix: как устроена лаба, чем отличаются режимы Exploit и Fix, как запускать</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/blog/how-to-learn-appsec</loc>
    <lastmod>2026-05-20</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/blog/how-to-learn-appsec"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/blog/top-10-go-vulnerabilities</loc>
    <lastmod>2026-05-18</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/blog/top-10-go-vulnerabilities"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
    </image:image>
  </url>
  <url>
    <loc>https://hackandfix.ru/blog/welcome-to-hackandfix</loc>
    <lastmod>2026-05-16</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.6</priority>
    <xhtml:link rel="alternate" hreflang="ru" href="https://hackandfix.ru/blog/welcome-to-hackandfix"/>
    <image:image>
      <image:loc>https://hackandfix.ru/public/og-default.png?v=987f8e4508&amp;g=afg1</image:loc>
    </image:image>
  </url>
</urlset>
