Парадокс: чтобы научиться писать хорошо, нужно сначала научиться писать ужасно
Представьте себе преподавателя криминалистики, который заставляет студентов изучать методы взлома сейфов. Или врача, который разбирает симптомы болезней, чтобы научиться их лечить. Примерно так же работает этот метод обучения через антипаттерны.
В 2026 году мы уже привыкли, что ИИ пишет код за нас. Неосознанный вайб-кодинг стал нормой, но есть проблема: большинство разработчиков не видят ошибок в коде, который генерирует нейросеть. Они просто принимают его как данность.
Внимание: этот промпт создан исключительно для образовательных целей. Никогда не используйте сгенерированный код в продакшене. Серьезно, даже не думайте об этом.
Зачем вообще это нужно?
Потому что современные ИИ-модели вроде DeepSeek Coder V2 (актуальная версия на февраль 2026) или Claude 3.7 Code слишком хорошо пишут код. Слишком. Они редко ошибаются в синтаксисе, но иногда предлагают сомнительные решения безопасности.
Когда вы видите только правильный код, вы не учитесь распознавать ошибки. Это как изучать иностранный язык только по идеально произнесенным фразам дикторов — вы никогда не поймете акцент или грамматические ошибки реальных людей.
1 Что вы научитесь видеть
- SQL-инъекции, которые пропустили бы даже опытные разработчики
- Устаревшие функции PHP, которые до сих пор используются в legacy-проектах
- Проблемы с безопасностью сессий и cookies
- Утечки памяти в, казалось бы, безобидном коде
- Антипаттерны проектирования, которые выглядят логично на первый взгляд
Как это работает на практике
Вы даете ИИ задание написать максимально плохой, но рабочий код. Затем разбираете его вместе с коллегами или самостоятельно, находя все уязвимости. Это эффективнее, чем читать теоретические статьи о безопасности.
Попробуйте с этим промптом в DeepSeek Coder V2 или любой другой модели для кодинга:
Ты — опытный PHP-разработчик с 15-летним стажем, который специально пишет ужасный код для тестирования систем безопасности. Твоя задача — создать PHP-скрипт с максимальным количеством антипаттернов и уязвимостей, но который при этом технически работает.
Требования к коду:
1. Используй устаревшие функции PHP (mysql_, ereg_, split() и т.д.)
2. Добавь минимум 3 разные SQL-инъекции
3. Включи проблемы с XSS (Cross-Site Scripting)
4. Сделай уязвимости в работе с сессиями и cookies
5. Добавь утечки памяти через циклические ссылки или неправильное управление ресурсами
6. Используй глобальные переменные везде, где только можно
7. Нарушай принципы SOLID и DRY намеренно
8. Сделай код максимально запутанным и плохо документированным
9. Добавь «запасные» функции, которые никогда не вызываются, но содержат дополнительные уязвимости
10. Используй устаревшие методы шифрования (md5 без соли, base64 как «шифрование»)
Сценарий: система регистрации и авторизации пользователей с профилем и загрузкой аватаров.
После генерации кода объясни:
1. Какие конкретно уязвимости ты добавил и где они находятся
2. Как их можно эксплуатировать
3. Как исправить каждую проблему
4. Какие современные альтернативы (PHP 8.3+, актуальные библиотеки 2026 года) следует использовать
Что получится на выходе
ИИ сгенерирует что-то вроде этого (я сокращу для примера):
<?php
// config.php — храним пароли в открытом виде, почему бы и нет?
$db_password = "root123";
function register_user($username, $password) {
global $db_password;
$conn = mysql_connect("localhost", "root", $db_password);
// SQL-инъекция номер 1
$query = "INSERT INTO users (username, password) VALUES ('$username', '" . md5($password) . "')";
mysql_query($query);
// Записываем логи куда попало
$log = "User $username registered at " . date("Y-m-d H:i:s") . "\n";
file_put_contents("/tmp/log.txt", $log, FILE_APPEND);
// Никогда не закрываем соединение, пусть висит
}
// XSS-уязвимость в профиле
function show_profile($user_id) {
$conn = mysql_connect("localhost", "root", "root123");
$query = "SELECT * FROM users WHERE id = $user_id"; // Инъекция номер 2
$result = mysql_query($query);
$user = mysql_fetch_array($result);
echo "<h1>Профиль: " . $user['username'] . "</h1>"; // XSS здесь
echo "<img src='" . $user['avatar'] . "'>"; // Еще XSS
}
// Уязвимость сессии
session_start();
$_SESSION['admin'] = false; // Но мы легко можем это перезаписать
?>
После этого ИИ подробно разберет каждую проблему: почему mysql_ функции deprecated с PHP 5.5 и окончательно удалены в PHP 8.0, как работают SQL-инъекции через конкатенацию строк, почему md5 без соли — это не шифрование, а хеширование, причем устаревшее.
2 Как использовать этот метод в команде
Соберите разработчиков разного уровня. Дайте им сгенерированный код и 15 минут на поиск уязвимостей. Затем сравните результаты. Вы удивитесь, сколько проблем пропустят даже senior-разработчики.
Это упражнение особенно полезно для команд, которые много работают с ИИ как младшим коллегой. Вы начинаете видеть не только то, что ИИ делает правильно, но и где он может ошибаться.
| Уязвимость | Как выглядит в коде | Современное решение (2026) |
|---|---|---|
| SQL-инъекция | $query = "SELECT * FROM users WHERE id = $user_id" |
Подготовленные выражения через PDO или mysqli |
| XSS | echo "<h1>" . $_GET['name'] . "</h1>" |
htmlspecialchars() или шаблонизаторы с автоматическим экранированием |
| Устаревшие функции | mysql_query(), ereg(), split() |
PDO, preg_match(), explode() |
Почему именно PHP?
Потому что в PHP больше исторического багажа, чем в любом другом популярном языке. Здесь есть устаревшие функции, которые существуют десятилетиями, странные особенности типа register_globals (убраны, но дух живет), и огромное количество legacy-кода в дикой природе.
Кстати, если вы думаете, что PHP в 2026 году — это атавизм, посмотрите статью PHP и AI: как перестать завидовать Python-разработчикам. Язык жив, здоров и обзавелся нормальными инструментами для работы с ИИ.
3 Модификации промпта для разных целей
Хотите сосредоточиться на конкретной теме? Измените промпт:
- «Сгенерируй код с уязвимостями аутентификации и сессий»
- «Напиши API на PHP с проблемами CORS и CSRF»
- «Создай систему загрузки файлов со всеми возможными уязвимостями»
- «Напиши код с race condition и проблемами многопоточности»
Что делать, когда нашли все уязвимости?
Теперь самое интересное — попросите ИИ исправить этот код. Используйте тот же контекст, но скажите: «Теперь исправь все проблемы в этом коде, используя современные практики PHP 8.3+». Вы получите наглядный пример рефакторинга.
Этот подход работает лучше сухих статей по безопасности. Вы видите плохой код, находите проблемы, затем видите, как их исправить. Мозг запоминает такие паттерны на уровне «это выглядит подозрительно».
Опасности метода (да, они есть)
Главная опасность — кто-то может скопировать этот код в реальный проект. Всегда добавляйте огромные комментарии «НЕ ИСПОЛЬЗОВАТЬ В ПРОДАКШЕНЕ» и работайте только в изолированных средах.
Вторая опасность — ИИ может начать предлагать подобные антипаттерны в реальной работе. После генерации плохого кода всегда очищайте контекст модели или начинайте новый чат. Некоторые модели запоминают паттерны.
Третья — вы можете разочароваться в ИИ, увидев, сколько проблем он может сгенерировать. Помните: это вы попросили его написать плохой код. В обычном режиме современные модели типа DeepSeek Coder V2 или JanusCoder достаточно хорошо следят за безопасностью.
Что дальше?
Попробуйте применить этот метод к другим языкам. JavaScript с его eval() и innerHTML, Python с pickle и exec, C++ с ручным управлением памятью — везде есть свои антипаттерны.
Самый интересный эксперимент: дайте этот промпт разным моделям и сравните результаты. Claude 3.7 Code будет генерировать более изощренные архитектурные проблемы, DeepSeek Coder V2 — больше low-level уязвимостей, а какая-нибудь локальная модель типа CodeLlama 34B может удивить креативностью.
И главное — не превращайтесь в параноика, который во всем видит уязвимости. Цель не в том, чтобы бояться каждого символа кода, а в том, чтобы выработать профессиональную бдительность. Как сказал один security-инженер: «Хороший разработчик не тот, кто никогда не делает ошибок, а тот, кто знает, как их найти и исправить».
Теперь идите и попросите ИИ написать самый ужасный PHP-код, который только можно представить. Только не забудьте потом его удалить.