<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:yandex="http://news.yandex.ru" xmlns:turbo="http://turbo.yandex.ru" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>Ресурсы</title>
    <link>https://gomultify.com/jp</link>
    <description/>
    <language>ru</language>
    <lastBuildDate>Sat, 30 May 2026 08:14:35 +0300</lastBuildDate>
    <item turbo="true">
      <title>Языки, коды и валюты СНГ: справочник для локализации сайтов</title>
      <link>https://gomultify.com/jp/resources/cis-language-reference</link>
      <amplink>https://gomultify.com/jp/resources/cis-language-reference?amp=true</amplink>
      <pubDate>Sat, 30 May 2026 12:00:00 +0300</pubDate>
      <description>ISO-коды языков и стран СНГ, аббревиатуры для переключателя языков, валюты, локали и особенности письменности — всё в одном месте.</description>
      <turbo:content><![CDATA[<header><h1>Языки, коды и валюты СНГ: справочник для локализации сайтов</h1></header><div class="t-redactor__embedcode"><div class="article-intro">
  <div class="article-intro__icon"></div>
  <div class="article-intro__text"><span class="article-intro__text-first">В этой статье:</span> как правильно подписывать языки в переключателе, ISO-коды, аббревиатуры, нюансы нативных названий и специальные символы, которые легко перепутать с русскими буквами.</div>
</div></div><div class="t-redactor__text">Когда настраиваешь hreflang для Казахстана, первый инстинкт — вписать KZ. Это код страны по <a href="https://www.iso.org/iso-3166-country-codes.html">ISO 3166-1</a>. Код языка — из другого стандарта, <a href="https://www.iso.org/iso-639-language-codes.html">ISO 639-1</a>, и для казахского он kk. Для армянского — hy, для грузинского — ka, для таджикского — tg. Ни один не совпадает с кодом страны.</div><div class="t-redactor__text">Путаница возникает потому что коды похожи: KZ и kk, AM и hy, GE и ka. Это главная ловушка при настройке hreflang, переключателя языков и передаче локали в платёжные системы.</div><h2  class="t-redactor__h2">Как писать языки в меню переключателя</h2><div class="t-redactor__text">«Казахский» или «Kazakh» в меню выглядит так же странно, как если бы в английском интерфейсе написали «Russian» вместо «Русский».</div><div class="t-redactor__embedcode"><!-- [ИЛЛЮСТРАЦИЯ] Скриншоты переключателей языков: tengrinews.kz, khovar.tj, armenpress.am — показать нативные названия в реальных меню --></div><div class="t-redactor__text">Редакционные сайты почти всегда используют полные нативные названия. <strong>tengrinews.kz</strong> — «Қазақша / Русский / English», <strong>khovar.tj</strong> — «Тоҷикӣ / Русский / English», <strong>armenpress.am</strong> — «Հայերեն» рядом с иконкой глобуса. Короткие коды (2–3 символа) оправданы только там где мало места: панели управления, мобильные меню, компактные SaaS-интерфейсы.</div><h3  class="t-redactor__h3">Нативные названия и аббревиатуры</h3><div class="t-table__viewport"><div class="t-table__wrapper"><table class="t-table__table"><tbody><tr class="t-table__row"><td class="t-table__cell" data-row="0" data-column="0"><div class="t-table__cell-content">Язык</div></td><td class="t-table__cell" data-row="0" data-column="1"><div class="t-table__cell-content">В меню</div></td><td class="t-table__cell" data-row="0" data-column="2"><div class="t-table__cell-content">Кратко</div></td><td class="t-table__cell" data-row="0" data-column="3"><div class="t-table__cell-content">ISO 639-1</div></td><td class="t-table__cell" data-row="0" data-column="4"><div class="t-table__cell-content">Код страны</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="1" data-column="0"><div class="t-table__cell-content">Русский</div></td><td class="t-table__cell" data-row="1" data-column="1"><div class="t-table__cell-content">Русский</div></td><td class="t-table__cell" data-row="1" data-column="2"><div class="t-table__cell-content">Рус</div></td><td class="t-table__cell" data-row="1" data-column="3"><div class="t-table__cell-content">ru</div></td><td class="t-table__cell" data-row="1" data-column="4"><div class="t-table__cell-content">RU</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="2" data-column="0"><div class="t-table__cell-content">Казахский</div></td><td class="t-table__cell" data-row="2" data-column="1"><div class="t-table__cell-content">Қазақша</div></td><td class="t-table__cell" data-row="2" data-column="2"><div class="t-table__cell-content">Қаз</div></td><td class="t-table__cell" data-row="2" data-column="3"><div class="t-table__cell-content"><strong>kk</strong></div></td><td class="t-table__cell" data-row="2" data-column="4"><div class="t-table__cell-content">KZ</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="3" data-column="0"><div class="t-table__cell-content">Кыргызский</div></td><td class="t-table__cell" data-row="3" data-column="1"><div class="t-table__cell-content">Кыргызча</div></td><td class="t-table__cell" data-row="3" data-column="2"><div class="t-table__cell-content">Кыр / Кырг</div></td><td class="t-table__cell" data-row="3" data-column="3"><div class="t-table__cell-content"><strong>ky</strong></div></td><td class="t-table__cell" data-row="3" data-column="4"><div class="t-table__cell-content">KG</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="4" data-column="0"><div class="t-table__cell-content">Армянский</div></td><td class="t-table__cell" data-row="4" data-column="1"><div class="t-table__cell-content">Հայերեն</div></td><td class="t-table__cell" data-row="4" data-column="2"><div class="t-table__cell-content">ՀԱՅ</div></td><td class="t-table__cell" data-row="4" data-column="3"><div class="t-table__cell-content"><strong>hy</strong></div></td><td class="t-table__cell" data-row="4" data-column="4"><div class="t-table__cell-content">AM</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="5" data-column="0"><div class="t-table__cell-content">Таджикский</div></td><td class="t-table__cell" data-row="5" data-column="1"><div class="t-table__cell-content">Тоҷикӣ</div></td><td class="t-table__cell" data-row="5" data-column="2"><div class="t-table__cell-content">ТҶ</div></td><td class="t-table__cell" data-row="5" data-column="3"><div class="t-table__cell-content"><strong>tg</strong></div></td><td class="t-table__cell" data-row="5" data-column="4"><div class="t-table__cell-content">TJ</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="6" data-column="0"><div class="t-table__cell-content">Узбекский</div></td><td class="t-table__cell" data-row="6" data-column="1"><div class="t-table__cell-content">O'zbekcha</div></td><td class="t-table__cell" data-row="6" data-column="2"><div class="t-table__cell-content">Uzb</div></td><td class="t-table__cell" data-row="6" data-column="3"><div class="t-table__cell-content">uz</div></td><td class="t-table__cell" data-row="6" data-column="4"><div class="t-table__cell-content">UZ</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="7" data-column="0"><div class="t-table__cell-content">Азербайджанский</div></td><td class="t-table__cell" data-row="7" data-column="1"><div class="t-table__cell-content">Azərbaycan dili</div></td><td class="t-table__cell" data-row="7" data-column="2"><div class="t-table__cell-content">Aze</div></td><td class="t-table__cell" data-row="7" data-column="3"><div class="t-table__cell-content">az</div></td><td class="t-table__cell" data-row="7" data-column="4"><div class="t-table__cell-content">AZ</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="8" data-column="0"><div class="t-table__cell-content">Грузинский</div></td><td class="t-table__cell" data-row="8" data-column="1"><div class="t-table__cell-content">ქართული</div></td><td class="t-table__cell" data-row="8" data-column="2"><div class="t-table__cell-content">Geo</div></td><td class="t-table__cell" data-row="8" data-column="3"><div class="t-table__cell-content"><strong>ka</strong></div></td><td class="t-table__cell" data-row="8" data-column="4"><div class="t-table__cell-content">GE</div></td></tr></tbody><colgroup><col style="max-width:180px;min-width:180px;width:180px;"><col style="max-width:180px;min-width:180px;width:180px;"><col style="max-width:180px;min-width:180px;width:180px;"><col style="max-width:180px;min-width:180px;width:180px;"><col style="max-width:180px;min-width:180px;width:180px;"></colgroup></table></div></div><h3  class="t-redactor__h3">По каждому языку отдельно</h3><div class="t-redactor__text"><strong>Казахский.</strong> Разработчик без казахского набивает в коде К вместо Қ — просто потому что <strong>Қ</strong> на русской клавиатуре нет. В переключателе появляется «Казакша» вместо «Қазақша». Выглядит как опечатка, а технически — другая строка: поиск по сайту сломается, сортировка поедет. Аббревиатура «КЗ» — по той же причине неправильная, правильно «ҚЗ».</div><div class="t-redactor__text">«Қазақша» означает «по-казахски» — разговорная, привычная форма. На официальных сайтах иногда пишут «Қазақ тілі» (казахский язык), но в меню «Қазақша» короче. Сравните: «Казак» (казак, человек) и «Қазақ» (казахский народ) — второе слово просто невозможно написать русскими буквами.</div><div class="t-redactor__text"><strong>Кыргызский.</strong> Здесь нет единого стандарта даже на официальных сайтах. <a href="https://kabar.kg">kabar.kg</a> пишет «Кыр», другие правительственные ресурсы — «Кырг». Оба варианта правильны. Практический совет: выбери один и держись его во всём интерфейсе. «Кырг» чуть однозначнее, если в вашем меню несколько аббревиатур на «К» (казахский, кыргызский, русский).</div><div class="t-redactor__text">И «Кыргызча», и «Кыргыз тили» — оба правильны: первый разговорнее («говорить по-кыргызски»), второй официальнее («кыргызский язык»). Для переключателя «Кыргызча» привычнее.</div><div class="t-redactor__text"><strong>Армянский.</strong> Это единственный язык в списке где выбор нативного названия зависит от того где живёт аудитория — потому что армянский существует в двух вариантах с разной орфографией (<a href="https://en.wikipedia.org/wiki/Western_Armenian">Wikipedia</a>):</div><div class="t-redactor__text"><ul><li data-list="bullet"><strong>Հայերեն</strong> — восточноармянский. Государственный язык Армении, реформированная советская орфография. На нём говорят в Армении, России, Грузии, Иране.</li><li data-list="bullet"><strong>Հայերէն</strong> — западноармянский. Классическая орфография, сохранившаяся в диаспоре после 1915 года. Ливан, Франция, США, Аргентина.</li></ul></div><div class="t-redactor__text">Разница — в одной букве: «ե» у восточного и «է» у западного. Но словарный запас тоже различается: «самолёт» по-восточному — «ինքնաթիռ», по-западному — «օդանաւ». Сайт для Армении — <strong>Հայերեն</strong>. Для армянской диаспоры — <strong>Հայերէն</strong>. ISO-код у обоих один — hy, но ISO 639-3 разделяет: hye (восточный) и hyw (западный). Аббревиатура «ՀԱՅ» — от армянского «Հայ» (армянин): «ՀԱ» без третьей буквы как слово не читается.</div><div class="t-redactor__text"><strong>Таджикский.</strong> Проблема та же что у казахского, но видна сразу: <strong>Ҷ</strong> стоит в самом названии языка. Если разработчик набьёт «ТЧ» вместо «ТҶ» — ошибка прямо в переключателе. <strong>Ҷ</strong> — это не «Ч»: звук ближе к английскому «j» в jump, что-то среднее между «дж» и мягким «ж». МИД Таджикистана на <a href="https://mfa.tj">mfa.tj</a> пишет именно «Ҷ». В слове «Тоҷикӣ» есть ещё <strong>Ӣ</strong> (долгое «и»), которой тоже нет на русской раскладке.</div><div class="t-redactor__text"><strong>Грузинский.</strong> Разработчики часто пытаются сократить «ქართული» до «Geo» или «GE» — просто потому что не знают как работать с нелатинским шрифтом в интерфейсе или боятся проблем с рендерингом. Грузины мгновенно это считывают: «GE» воспринимается как иностранный технический код, не как родное слово. Мхедрули — письменность 1600 лет, созданная изолированно. «გამარჯობა» — это «здравствуйте». Пишите «ქართული» полностью, даже в компактных интерфейсах.</div><div class="t-redactor__embedcode"><!-- [ИЛЛЮСТРАЦИЯ] Скриншоты переключателей с сайтов клиентов Multify — arcanewarrior.kz (казахский/русский), bergauf-lkm.ru или другой клиент с грузинским/армянским --></div><div class="t-redactor__embedcode"><a class="article-link" href="https://gomultify.com/jp/blog/website-localization-kazakhstan">
  <div class="article-link__label">Читать по теме</div>
  <div class="article-link__title">Локализация сайта для Казахстана: язык, валюта, поисковики</div>
  <div class="article-link__desc">Казахский и русский языки, тенге, Яндекс или Google — что нужно учесть при выходе на казахстанский рынок.</div>
  <div class="article-link__button">Читать статью →</div>
</a></div><h2  class="t-redactor__h2">Локали и валюты</h2><div class="t-redactor__text">Локаль — это связка «язык + страна». Она определяет формат чисел и дат, символ валюты, порядок сортировки. В локали используется код языка, а не страны: kk_KZ, не kz_KZ. hy_AM, не am_AM. Та же логика что с ISO 639-1.</div><div class="t-table__viewport"><div class="t-table__wrapper"><table class="t-table__table"><tbody><tr class="t-table__row"><td class="t-table__cell" data-row="0" data-column="0"><div class="t-table__cell-content">Страна</div></td><td class="t-table__cell" data-row="0" data-column="1"><div class="t-table__cell-content">Код страны</div></td><td class="t-table__cell" data-row="0" data-column="2"><div class="t-table__cell-content">Локаль</div></td><td class="t-table__cell" data-row="0" data-column="3"><div class="t-table__cell-content">Валюта</div></td><td class="t-table__cell" data-row="0" data-column="4"><div class="t-table__cell-content">Символ</div></td><td class="t-table__cell" data-row="0" data-column="5"><div class="t-table__cell-content">Код валюты</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="1" data-column="0"><div class="t-table__cell-content">Россия</div></td><td class="t-table__cell" data-row="1" data-column="1"><div class="t-table__cell-content">RU</div></td><td class="t-table__cell" data-row="1" data-column="2"><div class="t-table__cell-content">ru_RU</div></td><td class="t-table__cell" data-row="1" data-column="3"><div class="t-table__cell-content">Рубль</div></td><td class="t-table__cell" data-row="1" data-column="4"><div class="t-table__cell-content">₽</div></td><td class="t-table__cell" data-row="1" data-column="5"><div class="t-table__cell-content">RUB</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="2" data-column="0"><div class="t-table__cell-content">Казахстан</div></td><td class="t-table__cell" data-row="2" data-column="1"><div class="t-table__cell-content">KZ</div></td><td class="t-table__cell" data-row="2" data-column="2"><div class="t-table__cell-content">kk_KZ</div></td><td class="t-table__cell" data-row="2" data-column="3"><div class="t-table__cell-content">Тенге</div></td><td class="t-table__cell" data-row="2" data-column="4"><div class="t-table__cell-content">₸</div></td><td class="t-table__cell" data-row="2" data-column="5"><div class="t-table__cell-content">KZT</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="3" data-column="0"><div class="t-table__cell-content">Кыргызстан</div></td><td class="t-table__cell" data-row="3" data-column="1"><div class="t-table__cell-content">KG</div></td><td class="t-table__cell" data-row="3" data-column="2"><div class="t-table__cell-content">ky_KG</div></td><td class="t-table__cell" data-row="3" data-column="3"><div class="t-table__cell-content">Сом</div></td><td class="t-table__cell" data-row="3" data-column="4"><div class="t-table__cell-content">с</div></td><td class="t-table__cell" data-row="3" data-column="5"><div class="t-table__cell-content">KGS</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="4" data-column="0"><div class="t-table__cell-content">Армения</div></td><td class="t-table__cell" data-row="4" data-column="1"><div class="t-table__cell-content">AM</div></td><td class="t-table__cell" data-row="4" data-column="2"><div class="t-table__cell-content">hy_AM</div></td><td class="t-table__cell" data-row="4" data-column="3"><div class="t-table__cell-content">Драм</div></td><td class="t-table__cell" data-row="4" data-column="4"><div class="t-table__cell-content">֏</div></td><td class="t-table__cell" data-row="4" data-column="5"><div class="t-table__cell-content">AMD</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="5" data-column="0"><div class="t-table__cell-content">Таджикистан</div></td><td class="t-table__cell" data-row="5" data-column="1"><div class="t-table__cell-content">TJ</div></td><td class="t-table__cell" data-row="5" data-column="2"><div class="t-table__cell-content">tg_TJ</div></td><td class="t-table__cell" data-row="5" data-column="3"><div class="t-table__cell-content">Сомони</div></td><td class="t-table__cell" data-row="5" data-column="4"><div class="t-table__cell-content">SM</div></td><td class="t-table__cell" data-row="5" data-column="5"><div class="t-table__cell-content">TJS</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="6" data-column="0"><div class="t-table__cell-content">Узбекистан</div></td><td class="t-table__cell" data-row="6" data-column="1"><div class="t-table__cell-content">UZ</div></td><td class="t-table__cell" data-row="6" data-column="2"><div class="t-table__cell-content">uz_UZ</div></td><td class="t-table__cell" data-row="6" data-column="3"><div class="t-table__cell-content">Узбекский сум</div></td><td class="t-table__cell" data-row="6" data-column="4"><div class="t-table__cell-content">so'm</div></td><td class="t-table__cell" data-row="6" data-column="5"><div class="t-table__cell-content">UZS</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="7" data-column="0"><div class="t-table__cell-content">Азербайджан</div></td><td class="t-table__cell" data-row="7" data-column="1"><div class="t-table__cell-content">AZ</div></td><td class="t-table__cell" data-row="7" data-column="2"><div class="t-table__cell-content">az_AZ</div></td><td class="t-table__cell" data-row="7" data-column="3"><div class="t-table__cell-content">Манат</div></td><td class="t-table__cell" data-row="7" data-column="4"><div class="t-table__cell-content">₼</div></td><td class="t-table__cell" data-row="7" data-column="5"><div class="t-table__cell-content">AZN</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="8" data-column="0"><div class="t-table__cell-content">Грузия</div></td><td class="t-table__cell" data-row="8" data-column="1"><div class="t-table__cell-content">GE</div></td><td class="t-table__cell" data-row="8" data-column="2"><div class="t-table__cell-content">ka_GE</div></td><td class="t-table__cell" data-row="8" data-column="3"><div class="t-table__cell-content">Лари</div></td><td class="t-table__cell" data-row="8" data-column="4"><div class="t-table__cell-content">₾</div></td><td class="t-table__cell" data-row="8" data-column="5"><div class="t-table__cell-content">GEL</div></td></tr></tbody><colgroup><col style="max-width:180px;min-width:180px;width:180px;"><col style="max-width:180px;min-width:180px;width:180px;"><col style="max-width:180px;min-width:180px;width:180px;"><col style="max-width:180px;min-width:180px;width:180px;"><col style="max-width:180px;min-width:180px;width:180px;"><col style="max-width:180px;min-width:180px;width:180px;"></colgroup></table></div></div><div class="t-redactor__text">Коды валют — отдельный стандарт, <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO 4217</a>. Несколько нюансов:</div><div class="t-redactor__text">Узбекский so'm — официальное сокращение, пишется строчными буквами с апострофом. В интерфейсах часто используют просто «сум» или «UZS» — оба варианта приняты.</div><div class="t-redactor__text">Казахстан и Россия делят телефонный код +7. Если в форме регистрации страну определяют автоматически по телефонному номеру — это сломается: +7 701 может быть и Москва, и Алматы. Запрашивайте страну отдельным полем или определяйте по IP.</div><div class="t-redactor__text">В Грузии два официальных языка: грузинский и абхазский. Для коммерческого сайта это почти никогда не нужно, но если проект государственный или ориентирован на Абхазию — учитывайте.</div><div class="t-redactor__embedcode"><a class="article-link" href="https://gomultify.com/jp/blog/website-localization-armenia-georgia">
  <div class="article-link__label">Читать по теме</div>
  <div class="article-link__title">Армения и Грузия: особенности локализации сайта</div>
  <div class="article-link__desc">Языки, поисковики, особенности рынков, технические нюансы.</div>
  <div class="article-link__button">Читать статью →</div>
</a></div><h2  class="t-redactor__h2">Шрифты и письменности</h2><div class="t-redactor__text">Если подключить Google Font только с кириллическим диапазоном, армянский и грузинский текст не отобразится в нужном шрифте — браузер подставит системный fallback, и страница будет выглядеть непоследовательно. Армянский Unicode-блок — U+0530–U+058F, грузинский — U+10A0–U+10FF. <strong>Noto Sans</strong> от Google покрывает оба — подключите его как запасной шрифт для этих языков.</div><div class="t-redactor__text">Большинство языков СНГ используют кириллицу, но три страны перешли на латиницу после распада СССР: Узбекистан в 1993 году, Азербайджан в 1991-м. Кириллица там ещё встречается в старых документах и у старшего поколения, но новый контент — латиница. Казахстан начал переход в 2017 году, новая орфография утверждена в 2023-м. Это уже третья смена алфавита за сто лет: арабская вязь, потом Яналиф (советская латиница в 1930-х), потом кириллица, теперь снова латиница.</div><div class="t-redactor__text">Узбекскому не нужен отдельный шрифт — там стандартная латиница плюс апостроф в O'zbekcha. Большинство латинских шрифтов это покрывают. Проверьте только символ ʻ (U+02BB) — он есть не везде.</div><div class="t-redactor__text">Армянский и грузинский — полностью самостоятельные системы, не связанные ни с кириллицей, ни с латиницей, ни друг с другом. <a href="https://ru.wikipedia.org/wiki/Армянский_алфавит">Армянский алфавит</a> создан в 405 году монахом Месропом Маштоцем для перевода Библии. Грузинское мхедрули примерно того же возраста.</div><h2  class="t-redactor__h2">Буквы, которых нет на русской клавиатуре</h2><div class="t-redactor__text">Казахский и таджикский содержат буквы которые на экране легко перепутать с русскими, но технически это разные Unicode-символы. Поиск по сайту не найдёт слово, сортировка поедет, а носители языка заметят сразу.</div><div class="t-redactor__text">В казахском 42 буквы — 33 стандартных плюс 9 специальных: Ә, Ғ, Қ, Ң, Ө, Ұ, Ү, Һ, І. В таджикском свои 6 дополнительных: Ғ, Ҳ, Қ, Ҷ, Ӣ, Ӯ.</div><div class="t-redactor__text"><strong>Қ</strong> и <strong>К</strong> при внимательном взгляде отличаются (у Қ есть хвостик снизу) — но на русской клавиатуре <strong>Қ</strong> просто нет. Человек набирает «Казакша» вместо «Қазақша» не потому что невнимателен, а потому что нужная клавиша недоступна. Или копирует из источника где уже допущена такая замена и не замечает.</div><div class="t-redactor__text">Практически важны буквы в названиях языков и аббревиатурах: <strong>Қ</strong> в «Қазақша» и «ҚЗ», <strong>Ҷ</strong> и <strong>Ӣ</strong> в «Тоҷикӣ» и «ТҶ», <strong>І</strong> в казахских словах. Если вставляете текст из внешнего источника — проверяйте. Вставьте подозрительный символ на <a href="https://util.unicode.org/UnicodeJsps/character.jsp">unicode.org</a> и сразу увидите что это за точка.</div><div class="t-redactor__embedcode"><!-- [ИЛЛЮСТРАЦИЯ] Визуализация Unicode-ловушки: рядом К (U+041A, кириллица) и Қ (U+049A, казахская) — показать разницу крупно --></div><h2  class="t-redactor__h2">Часто задаваемые вопросы</h2><div class="t-redactor__text"><strong>Какой язык ставить по умолчанию для Казахстана — русский или казахский?</strong></div><div class="t-redactor__text">Для большинства коммерческих сайтов русский безопаснее как дефолт, особенно если аудитория старше 35 или это B2B. По переписи 2021 года казахским владеют около 80% населения, русским — около 70%, и они сильно пересекаются. Для молодёжной или государственной аудитории — казахский.</div><div class="t-redactor__text"><strong>Нужна ли отдельная версия сайта для западноармянского?</strong></div><div class="t-redactor__text">Только если вы целенаправленно работаете с армянской диаспорой в Ливане, Франции или США. Для проекта, ориентированного на Армению, достаточно восточноармянского (hye). Общий код hy технически принят для обоих вариантов.</div><div class="t-redactor__text"><strong>Как ставить hreflang для армянского?</strong></div><div class="t-redactor__text">hreflang="hy" — для восточноармянского (Армения). Для западноармянской диаспоры теоретически hyw, но это нестандартный тег, и не все краулеры его обрабатывают. Проще одна версия на hy, ориентированная на Армению.</div><div class="t-redactor__text"><strong>Что делать с казахским сейчас — кириллица или латиница?</strong></div><div class="t-redactor__text">Кириллица. Официальный документооборот и большинство сайтов всё ещё на кириллице. Новая латинская орфография утверждена в 2023 году, но массового перехода пока нет. За ситуацией следит <a href="https://www.gov.kz">gov.kz</a>.</div><div class="t-redactor__text"><strong>Почему код страны и код языка не совпадают — например, Армения AM, а армянский hy?</strong></div><div class="t-redactor__text">Это два независимых стандарта. ISO 3166-1 кодирует политические единицы (страны), ISO 639-1 — лингвистические (языки). Армянский получил код hy от латинизированного «Hayastan» — самоназвания Армении. Грузинский — ka от «Kartuli». Где-то коды совпадают (ru/RU, uz/UZ), где-то нет (hy/AM, ka/GE, kk/KZ). Совпадение — случайность, не правило.</div><div class="t-redactor__embedcode"><div class="cta-block">
  <div class="cta-block__title">Подключить казахский, армянский или грузинский к сайту?</div>
  <div class="cta-block__desc">Multify переводит сайт на нужные языки и автоматически настраивает локали, валюты и переключатель языков — без изменений в коде сайта.</div>
  <a class="cta-block__button" href="#popup:quote">Попробовать бесплатное демо →</a>
</div></div>]]></turbo:content>
    </item>
    <item turbo="true">
      <title>Разбор атаки: сканер уязвимостей против прокси Multify</title>
      <link>https://gomultify.com/jp/resources/website-scanner-protection</link>
      <amplink>https://gomultify.com/jp/resources/website-scanner-protection?amp=true</amplink>
      <pubDate>Sat, 30 May 2026 12:00:00 +0300</pubDate>
      <description>Разбор реальной атаки сканера уязвимостей: что ищут боты, как работает защита прокси-инфраструктуры Multify и почему клиентский сайт не получает ни одного вредоносного запроса.</description>
      <turbo:content><![CDATA[<header><h1>Разбор атаки: сканер уязвимостей против прокси Multify</h1></header><div class="t-redactor__embedcode"><div class="article-intro">
  <div class="article-intro__icon"></div>
  <div class="article-intro__text"><span class="article-intro__text-first">В этой статье:</span> разбор реальной атаки сканера уязвимостей на прокси-инфраструктуру Multify — что ищут боты, как их блокируют на подходе и почему сайт клиента об этом даже не узнаёт.</div>
</div></div><div class="t-redactor__text">29 мая 2026 года, 17:04. К прокси-серверу Multify подключились два IP-адреса из Кот-д'Ивуара. За следующие 90 секунд они перебрали почти 100 URL и получили 100 отказов.</div><div class="t-redactor__text">Это типичная работа сканера уязвимостей. Не целенаправленный взлом, а автоматическая разведка. Такие сканеры работают непрерывно, обходя миллионы сайтов в поисках одного: открытого файла с ключами, паролями или конфигурацией, либо известной уязвимости в CMS. Неважно на чём стоит сайт — WordPress, Drupal, Joomla или самописный движок. Сканер проверяет всё подряд по стандартному словарю.</div><div class="t-redactor__text">Multify как обратный прокси принимает весь входящий трафик на себя. Сканер стучится в инфраструктуру Multify, а не напрямую к сайту клиента. Защита прокси — это и есть защита клиентских сайтов.</div><h2  class="t-redactor__h2">Что ищет сканер</h2><div class="t-redactor__text">Вот список из реального лога:</div><div class="t-redactor__text">`` /.env /.env.production /.env.local /.env.bak /wp-config.php /config/database.php /config/secrets.yml /azure-credentials.json /gcp-credentials.json /private.key /database.sql /dump.sql ``</div><div class="t-redactor__text">Это не случайный набор, а стандартный словарь, составленный из реальных утечек. Каждый файл в этом списке когда-то нашли в открытом доступе на чьём-то продакшн-сервере.</div><h3  class="t-redactor__h3">Что именно ищут</h3><div class="t-redactor__text"><strong>Переменные окружения</strong> — файлы .env и их варианты. В них разработчики хранят ключи API, пароли к базам данных, токены платёжных систем. Один такой файл даёт атакующему полный доступ к инфраструктуре без каких-либо следов взлома. По данным GitGuardian, в 2024 году секреты в публичных репозиториях обнаруживались более 12 миллионов раз, .env в тройке самых частых. Разработчик добавляет файл в .gitignore, но на сервере после деплоя он остаётся в публичной директории, и никто не проверяет.</div><div class="t-redactor__text"><strong>Конфиги CMS и фреймворков</strong> — wp-config.php (WordPress), конфиги Joomla, Drupal, файлы Laravel, Symfony, Rails. Сканер не знает, на чём написан сайт, поэтому проверяет все популярные варианты подряд.</div><div class="t-redactor__text"><strong>Облачные ключи</strong> — gcp-credentials.json, azure-credentials.json, service-account.json, terraform.tfvars. Попадание означает доступ к облачному аккаунту со всеми данными и потенциальными счетами на десятки тысяч долларов.</div><div class="t-redactor__text"><strong>Ключи шифрования</strong> — private.key, server.key, rails/master.key. Открытый приватный ключ позволяет расшифровать весь трафик или подделать подписи.</div><div class="t-redactor__text"><strong>Логи и дампы</strong> — error.log, debug.log, database.sql, dump.sql. Логи часто содержат данные пользователей, пути к файлам, иногда пароли в открытом виде.</div><div class="t-redactor__text"><strong>Конфиги инфраструктуры</strong> — nginx.conf, docker-compose.yml, web.config. Из них можно узнать внутреннюю топологию сети и найти следующую точку входа.</div><div class="t-redactor__text"><strong>Уязвимости CMS</strong> — отдельная категория. Как только публикуется новый CVE, сканеры начинают проверять все сайты подряд, часто в течение нескольких часов. По данным Google Project Zero, медиана от публикации CVE до первых атак — 15 дней, но для уязвимостей с публичным PoC это время сократилось до нескольких часов. Пример, который сейчас в активной эксплуатации: <a href="https://www.crowdsec.net/vulntracking-report/cve-2026-9082-drupal-jsonapi-sql-injection">CVE-2026-9082</a>, SQL-инъекция в Drupal Core на PostgreSQL (версии 8.0 до 11.3.9). Уязвимость в том, как Drupal строит SQL-запросы через JSON:API: атакующий передаёт в параметре фильтра ключ массива с вложенным SQL, Drupal вставляет его в запрос без санитизации. Без авторизации, через обычный HTTP-запрос. Результат: выгрузка базы данных, создание admin-аккаунта, в некоторых конфигурациях выполнение произвольного кода. CVSS 9.8, критическая (для сравнения: Log4Shell, который положил половину интернета в 2021 году, получил 10.0). Патч вышел 20 мая, рабочий PoC появился на GitHub менее чем через час. 22 мая уязвимость добавили в каталог CISA Known Exploited Vulnerabilities. За первые 48 часов зафиксировано более 15 000 попыток эксплуатации на почти 6 000 сайтах в 65 странах.</div><div class="t-redactor__embedcode"><!-- [ИЛЛЮСТРАЦИЯ: таймлайн] 18 мая PSA → 20 мая патч+diff → <1 часа PoC на GitHub → 22 мая CISA KEV → 29 мая атака на Multify (WAF блокирует за 90 секунд). Источники: Drupal SA-CORE-2026-004, Imperva, CISA KEV --></div><div class="t-redactor__text">Атака 29 мая была именно такой. WAF отработал по сигнатурам OWASP CRS, CrowdSec добавил оба IP в список заблокированных. Клиент об этом не узнал.</div><div class="t-redactor__text">Сканер прошёлся по всем категориям сразу, за 90 секунд.</div><h2  class="t-redactor__h2">Два IP — один сканер</h2><div class="t-redactor__text">Сканер запустился с двух адресов одновременно. Современные сканеры распределяют нагрузку по нескольким IP, чтобы оставаться ниже порога простых rate-limit правил. Если защита срабатывает на «больше 10 запросов в минуту с одного IP», сканер просто делает по 5 с каждого. При этом сами IP чаще всего не имеют отношения к реальному атакующему — это арендованные VPS, взломанные серверы или ботнет-машины по всему миру. Кот-д'Ивуар здесь случайная география, а не место откуда реально работает человек.</div><div class="t-redactor__text">Любопытная деталь из лога: первый запрос второго IP вернул 200 — сканер сначала проверил главную страницу, убедился что сайт живой, и только потом начал перебор. Это признак инструмента, а не случайного трафика.</div><h2  class="t-redactor__h2">Как прокси блокирует атаку</h2><div class="t-redactor__embedcode"><!-- [ИЛЛЮСТРАЦИЯ: схема блокировки] Сканер (2 IP, Кот-д'Ивуар) → 100 URL → WAF (OWASP CRS, блок по имени: .env/.sql/wp-config) → CrowdSec (блок по паттерну: 10+ запросов за 30 сек) → Сайт клиента (не получает ничего). Результат: 0 успешных вредоносных запросов за 90 секунд --></div><h3  class="t-redactor__h3">WAF</h3><div class="t-redactor__text"><a href="https://owasp.org/www-community/Web_Application_Firewall">WAF</a> (Web Application Firewall) — файрвол уровня приложения. В отличие от сетевого файрвола, который смотрит на IP и порты, WAF читает содержимое HTTP-запроса: URL, заголовки, тело. Он анализирует каждый запрос до того, как тот доходит до сайта.</div><div class="t-redactor__text">Основа правил — <a href="https://owasp.org/www-project-modsecurity-core-rule-set/">OWASP Core Rule Set</a> (CRS), открытый набор сигнатур атак, который поддерживает некоммерческий фонд OWASP. CRS покрывает перебор файлов конфигурации, SQL-инъекции, XSS и другие распространённые векторы. Запросы к .env, .sql, .key, wp-config.php и десяткам других расширений блокируются сразу. WAF не знает, существует ли файл на сервере — он блокирует по имени запроса, и сканер получает отказ до того, как успевает что-либо узнать.</div><h3  class="t-redactor__h3">CrowdSec</h3><div class="t-redactor__text"><a href="https://www.crowdsec.net/">CrowdSec</a> — открытый движок поведенческого анализа. WAF работает с каждым запросом отдельно, CrowdSec смотрит на последовательность: что именно запрашивает этот IP на протяжении последних минут.</div><div class="t-redactor__text">Один запрос к .env может быть ошибкой в ссылке. Десять запросов к .env, .env.production, .env.local, .envrc за 30 секунд — это уже не пользователь. CrowdSec распознаёт этот паттерн по <a href="https://docs.crowdsec.net/docs/concepts/">сценариям</a> (поведенческим правилам) и блокирует IP. Заблокированные адреса попадают в общую базу угроз, которой пользуются тысячи серверов по всему миру. Сканер, засечённый на одном сайте, сразу становится нежелательным гостем везде.</div><h2  class="t-redactor__h2">Атака в цифрах</h2><div class="t-table__viewport"><div class="t-table__wrapper"><table class="t-table__table"><tbody><tr class="t-table__row"><td class="t-table__cell" data-row="0" data-column="0"><div class="t-table__cell-content">Параметр</div></td><td class="t-table__cell" data-row="0" data-column="1"><div class="t-table__cell-content">Значение</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="1" data-column="0"><div class="t-table__cell-content">Длительность</div></td><td class="t-table__cell" data-row="1" data-column="1"><div class="t-table__cell-content">~90 секунд</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="2" data-column="0"><div class="t-table__cell-content">URL в переборе</div></td><td class="t-table__cell" data-row="2" data-column="1"><div class="t-table__cell-content">~100 на каждый IP</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="3" data-column="0"><div class="t-table__cell-content">Категорий целей</div></td><td class="t-table__cell" data-row="3" data-column="1"><div class="t-table__cell-content">8 (env, ключи, БД, логи, инфра, облако, CMS, фреймворки)</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="4" data-column="0"><div class="t-table__cell-content">Успешных запросов</div></td><td class="t-table__cell" data-row="4" data-column="1"><div class="t-table__cell-content">1 (главная страница, до срабатывания защиты)</div></td></tr><tr class="t-table__row"><td class="t-table__cell" data-row="5" data-column="0"><div class="t-table__cell-content">Утечек</div></td><td class="t-table__cell" data-row="5" data-column="1"><div class="t-table__cell-content">0</div></td></tr></tbody><colgroup><col style="max-width:180px;min-width:180px;width:180px;"><col style="max-width:180px;min-width:180px;width:180px;"></colgroup></table></div></div><div class="t-redactor__text">Сканер отработал стандартный словарь за полторы минуты и ушёл ни с чем. Сайт клиента не получил ни одного вредоносного запроса.</div><h2  class="t-redactor__h2">Почему это работает именно так</h2><div class="t-redactor__text">Когда сайт подключается к Multify, весь входящий трафик идёт через прокси. Клиент подключал Multify для локализации, а не для защиты. Но поскольку прокси стоит перед сайтом, вся защита инфраструктуры Multify автоматически распространяется на него.</div><div class="t-redactor__text">Утечки через открытые файлы — один из самых частых векторов взлома. Происходят не из-за сложных эксплойтов, а из-за банальных ошибок: разработчик задеплоил проект и забыл убрать .env. Поставил тестовый дамп базы в публичную папку. Оставил конфиг с паролями на сервере. Сканеры находят такие файлы в течение нескольких часов, задолго до того как кто-то из команды заметит ошибку.</div><h2  class="t-redactor__h2">Часто задаваемые вопросы</h2><div class="t-redactor__text"><strong>Multify защищает от CVE-2026-9082?</strong></div><div class="t-redactor__text">Если сайт клиента работает на Drupal с PostgreSQL — WAF на уровне прокси блокирует характерные паттерны запросов: сложные filter-параметры к /jsonapi, запросы к /user/login?_format=json с нестандартными телами. Сканер не добирается до сайта. Но это не замена патчу: если сайт доступен напрямую в обход прокси, защиты нет.</div><div class="t-redactor__text"><strong>Почему два IP, а не один?</strong></div><div class="t-redactor__text">Современные сканеры распределяют запросы по нескольким адресам, чтобы оставаться ниже порога простых rate-limit правил. CrowdSec смотрит на поведение, а не на количество запросов с одного IP, поэтому такая техника не помогает.</div><div class="t-redactor__text"><strong>Сканер что-то узнал о сайте клиента?</strong></div><div class="t-redactor__text">Нет. WAF блокирует запросы по имени пути до того как они доходят до приложения. Сканер не знает, существует ли файл на сервере — он получает отказ на уровне прокси.</div><div class="t-redactor__text"><strong>Что если атака не сканер, а целенаправленный взлом?</strong></div><div class="t-redactor__text">Целенаправленная атака сложнее: атакующий знает цель, использует нестандартные векторы и работает медленно, чтобы не попасть в поведенческие паттерны. WAF и CrowdSec снижают поверхность атаки, но не дают стопроцентной гарантии. Для критичных сайтов нужен penetration test и мониторинг аномалий.</div><div class="t-redactor__text"><strong>Кот-д'Ивуар — это важно?</strong></div><div class="t-redactor__text">Нет. Геолокация IP сканера — это геолокация машины, которую используют, а не атакующего. Блокировка по стране бессмысленна: следующая атака придёт из Бразилии, Нидерландов или России.</div><div class="t-redactor__embedcode"><div class="cta-block">
  <div class="cta-block__title">Защита в комплекте с локализацией</div>
  <div class="cta-block__desc">WAF и поведенческая блокировка работают на уровне прокси — для каждого сайта под Multify, без дополнительных настроек с вашей стороны.</div>
  <a class="cta-block__button" href="#popup:quote">Попробовать бесплатное демо →</a>
</div></div>]]></turbo:content>
    </item>
  </channel>
</rss>