/user?id=1 OR 1=1 возвращает вообще всех пользователей,
хотя ожидался один.
200 OK (application/json)
{"id":1,"email":"ceo@company.example"},
{"id":2,"email":"client@example.com"},
...
]
Приложение строит SQL через строковую конкатенацию с параметром пользователя. Атакующий подсовывает фрагмент SQL и получает данные, которые не должен видеть. Фикс — всегда использовать подготовленные выражения (PreparedStatement).
/user?id=1 OR 1=1 возвращает вообще всех пользователей,
хотя ожидался один.
PreparedStatement,
где параметры подставляются безопасно и не «ломают» структуру SQL.
Тест отправляет id=1 OR 1=1.
Если сервис возвращает больше одного пользователя — билд стопается.
#!/bin/bash # sqlinj-check.sh RESP=$(curl -s "https://staging.example.internal/user?id=1%20OR%201=1") COUNT=$(echo "$RESP" | grep -o '"id":' | wc -l) if [ "$COUNT" -gt 1 ]; then echo "[BLOCK] SQLi: эндпоинт вернул больше одного пользователя" exit 1 fi echo "[OK] Параметризованный запрос защищает от SQLi" exit 0
Это фиксирует стандарт: никаких строковых конкатенаций для SQL вообще.
Стандарт:ни один SQL-запрос не строится через конкатенацию строк с пользовательским вводом. Никогда.