← Назад к вопросам

Есть ли незакрытые правонарушения?

1.0 Junior🔥 131 комментариев
#Soft Skills и рабочие процессы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Есть ли незакрытые правонарушения?

Это интересный вопрос, который может означать несколько разных вещей в контексте frontend-разработки. Позвольте дать несколько интерпретаций:

1. Проблемы безопасности (если вопрос о уязвимостях)

Да, в веб-разработке постоянно обнаруживаются незакрытые уязвимости:

Частые проблемы безопасности

// XSS (Cross-Site Scripting) — незакрытая уязвимость
function renderUserComment(comment) {
  // BAD: пользователь может ввести <script> код
  document.getElementById('comments').innerHTML = comment;
  
  // GOOD: безопасный способ
  const div = document.createElement('div');
  div.textContent = comment; // текст, не HTML
  document.getElementById('comments').appendChild(div);
}

// CSRF (Cross-Site Request Forgery)
// BAD: без защиты от CSRF
fetch('/api/delete-account', { method: 'POST' });

// GOOD: с токеном CSRF
fetch('/api/delete-account', {
  method: 'POST',
  headers: {
    'X-CSRF-Token': getCsrfToken()
  }
});

// Утечка данных через console.log в production
// BAD
console.log('API Token:', token);

// GOOD
if (process.env.NODE_ENV === 'development') {
  console.log('Debug info:', data);
}

OWASP Top 10 для Frontend

  1. Injection — XSS, SQL injection
  2. Broken Authentication — плохая обработка сессий
  3. Sensitive Data Exposure — передача данных по HTTP
  4. XML External Entities — XXE атаки
  5. Broken Access Control — отсутствие проверки прав
  6. Security Misconfiguration — неправильные настройки
  7. Cross-Site Scripting (XSS) — главная угроза для frontend
  8. Insecure Deserialization — опасная работа с JSON
  9. Using Components with Known Vulnerabilities — старые библиотеки
  10. Insufficient Logging & Monitoring — отсутствие логирования

2. Непокрытые части кода (если вопрос о тестировании)

В тестировании существует понятие "uncovered code" — код, который не покрыт тестами:

// Функция
function getUserName(user) {
  if (!user) {
    // Это условие может быть незакрыто тестами
    throw new Error('User not found');
  }
  return user.name;
}

// Тест
test('returns user name', () => {
  const user = { name: 'John' };
  expect(getUserName(user)).toBe('John');
  // Но не тестируем: что если user = null?
});

// GOOD: покрыть все пути
test('throws error when user is null', () => {
  expect(() => getUserName(null)).toThrow('User not found');
});

Стандарты покрытия:

  • 80%+ обычно считается хорошим
  • 90%+ считается отличным
  • 100% редко достижимо и не всегда необходимо

3. Нарушения Best Practices

В коде часто есть нарушения, которые остаются без внимания:

// ESLint может найти:
// - Неиспользуемые переменные
// - Отсутствующие зависимости в useEffect
// - Функции без типизации (в TypeScript)
// - Unsafe DOM операции

// Пример нарушения
function MyComponent() {
  const [count, setCount] = useState(0);
  const [data, setData] = useState(null);

  useEffect(() => {
    fetchData(); // BAD: зависимость отсутствует
  }, []);

  // data никогда не используется
  return <div>{count}</div>;
}

// GOOD: исправили
function MyComponent() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    fetchData();
  }, []);

  return <div>{count}</div>;
}

4. Нарушения в доступности (Accessibility)

// BAD: много нарушений доступности
<button onClick={handleClick} style="color: blue;">
  <div>Нажми</div>
</button>

// GOOD: исправлено
<button 
  onClick={handleClick}
  aria-label="Открыть меню"
  className="btn btn-primary"
>
  Нажми
</button>

// BAD: изображение без alt текста
<img src="photo.jpg" />

// GOOD
<img src="photo.jpg" alt="Фото профиля пользователя" />

// BAD: цвет как единственный способ различать информацию
<div style="color: red">Ошибка</div>

// GOOD
<div className="error" aria-live="polite" role="alert">
  <icon>!</icon> Ошибка: Введены некорректные данные
</div>

5. Performance Issues (незакрытые проблемы производительности)

// BAD: бесконечный цикл перерисовки
function MyComponent() {
  const [items, setItems] = useState([]);

  useEffect(() => {
    setItems([...items, 'new']); // Зависимость: items -> infinite loop!
  }, [items]);

  return <div>{items}</div>;
}

// BAD: не мемоизирован обработчик
function List() {
  const handleClick = () => console.log('click'); // новая функция каждый рендер
  return <Item onClick={handleClick} />; // Item перендеривается!
}

// GOOD
function List() {
  const handleClick = useCallback(() => {
    console.log('click');
  }, []);
  return <Item onClick={handleClick} />;
}

// BAD: утечка памяти
function useTimer() {
  useEffect(() => {
    const interval = setInterval(() => {
      console.log('tick');
    }, 1000);
    // забыли очистить interval!
  }, []);
}

// GOOD
function useTimer() {
  useEffect(() => {
    const interval = setInterval(() => {
      console.log('tick');
    }, 1000);
    return () => clearInterval(interval); // cleanup
  }, []);
}

6. Нарушения в регулярном аудите кода

// Что проверяют инструменты
const issues = [
  'console.log в production коде',
  'неиспользуемые импорты',
  'deprecated API',
  'отсутствие error boundaries',
  'вложенные тернарные операторы',
  'функции без комментариев',
  'magic numbers',
  'слишком длинные функции (>30 строк)',
  'циклическая сложность > 10'
];

Инструменты для поиска проблем

  • ESLint — статический анализ JavaScript/TypeScript
  • TypeScript — проверка типов
  • Lighthouse — аудит производительности, доступности, SEO
  • OWASP ZAP — поиск уязвимостей безопасности
  • Prettier — форматирование кода
  • SonarQube — комплексный анализ качества кода
  • npm audit — проверка известных уязвимостей в зависимостях

Как управлять незакрытыми нарушениями

  1. Регулярно запускай анализ кода:

    npm run lint
    npm audit
    npx lighthouse https://yoursite.com
    
  2. Используй pre-commit hooks:

    npm install husky --save-dev
    npx husky add .husky/pre-commit "npm run lint"
    
  3. Настрой CI/CD:

    • Запускай тесты на каждый PR
    • Проверяй coverage
    • Блокируй merge с нарушениями
  4. Делай code review:

    • Проверяй безопасность
    • Смотри performance
    • Проверяй accessibility

Заключение

В веб-разработке постоянно существуют незакрытые нарушения в следующих областях:

  • Безопасность — XSS, CSRF, injection атаки
  • Performance — утечки памяти, неоптимизированные рендеры
  • Доступность — отсутствие ARIA, alt текстов
  • Качество кода — нарушения best practices
  • Тестирование — непокрытые части кода

Для решения нужно использовать инструменты автоматизации и регулярные аудиты.