Метод stripLow

Метод stripLow из библиотеки Validator.js предназначен для удаления низкоуровневых ASCII-символов, которые обычно не отображаются в тексте и могут использоваться для скрытой передачи управляющих последовательностей. Такие символы включают в себя управляющие коды (0–31) и, при необходимости, символ DEL (127). Основное применение метода — очистка строкового ввода от потенциально опасных или нежелательных символов перед дальнейшей обработкой, хранением или валидацией.


Назначение и область применения

Низкоуровневые символы не видны пользователю, но могут влиять на обработку строк в системах:

  • нарушать логику сравнения строк;
  • использоваться для обфускации данных;
  • внедряться в пользовательский ввод при атаках;
  • искажать отображение логов и интерфейсов.

Метод stripLow используется как слой нормализации входных данных, особенно в формах, API-запросах и системах логирования.


Сигнатура метода

stripLow(str, keep_new_lines)

Параметры

str Строка, которую необходимо очистить от управляющих символов.

keep_new_lines (boolean) Определяет, сохранять ли символы перевода строки:

  • true — символы \n и \r сохраняются;
  • false (по умолчанию) — все управляющие символы удаляются, включая переводы строк.

Поведение метода

Метод проходит по строке и удаляет символы из диапазона ASCII:

  • 0–8
  • 11–12
  • 14–31
  • 127 (DEL)

При установке keep_new_lines = true символы:

  • \n (LF, 10)
  • \r (CR, 13)

исключаются из удаления.

Важно учитывать, что метод работает на уровне ASCII-кодов, а не Unicode-графем, поэтому многобайтовые символы (например, кириллица, эмодзи) не затрагиваются.


Примеры использования

Удаление всех управляющих символов

const validator = require('validator');

const input = "Hello\u0000World\u0007!";
const result = validator.stripLow(input);

console.log(result); // "HelloWorld!"

Сохранение переносов строк

const input = "Line1\nLine2\r\nLine3\u0003";
const result = validator.stripLow(input, true);

console.log(result);
// "Line1\nLine2\r\nLine3"

Очистка пользовательского ввода

const username = validator.stripLow(req.body.username);

В этом случае из имени пользователя удаляются скрытые управляющие символы, которые могут быть вставлены намеренно или случайно при копировании текста.


Влияние на безопасность

Использование stripLow снижает риск:

  • инъекций через управляющие символы;
  • обхода фильтров ввода;
  • скрытых модификаций логов (log smuggling);
  • проблем с сериализацией данных.

Однако метод не является полноценной защитой от атак и должен использоваться только как часть комплексной обработки входных данных.


Особенности работы с Unicode

Метод не модифицирует Unicode-символы, включая:

  • кириллицу;
  • латиницу;
  • иероглифы;
  • эмодзи.

Удаляются исключительно управляющие ASCII-коды, что делает метод безопасным для многоязычных систем.


Типичные сценарии применения

Очистка форм

В пользовательских формах метод применяется для нормализации текста перед валидацией длины, формата или сохранением в базу данных.

const comment = validator.stripLow(req.body.comment, true);

Обработка API-данных

При получении внешних данных API может содержать скрытые символы, влияющие на парсинг JSON или сравнение строк.


Логирование

Перед записью в лог-систему данные очищаются, чтобы предотвратить внедрение управляющих последовательностей:

logger.info(validator.stripLow(message));

Ограничения метода

  • не удаляет пробелы и табуляции (если они не являются управляющими символами вне стандартного диапазона);
  • не выполняет нормализацию Unicode;
  • не защищает от HTML/SQL/XSS-инъекций;
  • не влияет на визуально похожие символы (homoglyph атаки);
  • не выполняет валидацию структуры данных.

Отличие от других методов Validator.js

  • escape() — преобразует HTML-символы в сущности;
  • trim() — удаляет пробелы по краям строки;
  • stripLow() — удаляет управляющие символы ASCII;
  • whitelist() — оставляет только разрешённые символы;
  • blacklist() — удаляет указанные символы.

stripLow находится на более низком уровне обработки текста и применяется до логической валидации содержимого.


Практическая роль в цепочке обработки данных

Типичная последовательность обработки пользовательского ввода может выглядеть так:

  1. stripLow — удаление управляющих символов;
  2. trim — обрезка пробелов;
  3. normalize (внешние библиотеки) — приведение Unicode;
  4. бизнес-валидация (формат, длина, правила домена).

Такое разделение позволяет изолировать низкоуровневые шумовые данные от прикладной логики.