This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
средства_программирования_shell [2026/10/13 13:03] val [Тестирование Web приложения на shell] |
средства_программирования_shell [2026/10/14 07:42] (current) val [Тестирование Web приложения на shell] |
||
|---|---|---|---|
| Line 519: | Line 519: | ||
| * На примере [[Web интерфейс к почте#Roundcube]] | * На примере [[Web интерфейс к почте#Roundcube]] | ||
| - | * **Промпт:** напиши bash скрипт для тестирования работы roundcube, подключение, получение токенов, отключение, логин и пароль в переменные | + | * **Промпт:** напиши bash скрипт для тестирования работы roundcube, подключение, получение токенов, отключение, логин и пароль в переменные, результат через код возврата |
| - | + | ||
| - | * Автор Google AI | + | |
| - | <code> | + | |
| - | root@server:~# cat /usr/local/bin/roundcube_monitor.sh | + | |
| - | </code><code> | + | |
| - | #!/bin/bash | + | |
| - | + | ||
| - | # ============================================================================== | + | |
| - | # НАСТРОЙКИ ПОДКЛЮЧЕНИЯ И АВТОРИЗАЦИИ | + | |
| - | # ============================================================================== | + | |
| - | ROUNDCUBE_URL="http://server.corp13.un/mail" # Укажите URL вашего Roundcube без слэша на конце | + | |
| - | USERNAME="student" # Логин | + | |
| - | PASSWORD="password" # Пароль | + | |
| - | + | ||
| - | # Файлы для хранения временных данных сессии | + | |
| - | COOKIE_JAR=$(mktemp) | + | |
| - | + | ||
| - | echo "=== Старт тестирования Roundcube ===" | + | |
| - | + | ||
| - | # ============================================================================== | + | |
| - | # ШАГ 1: Подключение к странице логина и получение CSRF-токена | + | |
| - | # ============================================================================== | + | |
| - | echo "1. Подключение к главной странице и получение токена..." | + | |
| - | + | ||
| - | # Запрашиваем страницу входа, сохраняем куки и вытаскиваем hidden-поле _token | + | |
| - | LOGIN_PAGE_HTML=$(curl -s -L -c "$COOKIE_JAR" "$ROUNDCUBE_URL/") | + | |
| - | + | ||
| - | # Извлекаем значение токена с помощью grep и sed | + | |
| - | TOKEN=$(echo "$LOGIN_PAGE_HTML" | grep -oE 'name="_token" value="[^"]+"' | sed 's/name="_token" value="//;s/"//') | + | |
| - | + | ||
| - | if [ -z "$TOKEN" ]; then | + | |
| - | echo "[-] Ошибка: Не удалось получить CSRF-токен (_token). Проверьте URL или структуру страницы." | + | |
| - | rm -f "$COOKIE_JAR" | + | |
| - | exit 1 | + | |
| - | fi | + | |
| - | + | ||
| - | echo "[+] Токен успешно получен: $TOKEN" | + | |
| - | + | ||
| - | # ============================================================================== | + | |
| - | # ШАГ 2: Авторизация (Логин) | + | |
| - | # ============================================================================== | + | |
| - | echo "2. Выполнение авторизации..." | + | |
| - | + | ||
| - | # Отправляем POST-запрос с куками из предыдущего шага и необходимыми параметрами | + | |
| - | # Roundcube обычно ожидает: _task=login, _action=login, _timezone, _url, _user, _pass, _token | + | |
| - | AUTH_RESPONSE=$(curl -s -L -b "$COOKIE_JAR" -c "$COOKIE_JAR" -X POST \ | + | |
| - | --data-urlencode "_task=login" \ | + | |
| - | --data-urlencode "_action=login" \ | + | |
| - | --data-urlencode "_timezone=Europe/Moscow" \ | + | |
| - | --data-urlencode "_url=" \ | + | |
| - | --data-urlencode "_user=$USERNAME" \ | + | |
| - | --data-urlencode "_pass=$PASSWORD" \ | + | |
| - | --data-urlencode "_token=$TOKEN" \ | + | |
| - | "$ROUNDCUBE_URL/?_task=login") | + | |
| - | + | ||
| - | # ============================================================================== | + | |
| - | # ШАГ 3: Проверка успешности входа | + | |
| - | # ============================================================================== | + | |
| - | # Обычно при успешном входе Roundcube перенаправляет на ?_task=mail | + | |
| - | # Мы проверим наличие в ответе признаков успешного входа (например, смены таски на mail) | + | |
| - | if echo "$AUTH_RESPONSE" | grep -q '_task=mail' || echo "$AUTH_RESPONSE" | grep -q 'rcmail.env'; then | + | |
| - | echo "[+] Авторизация успешна! Доступ к почтовому ящику получен." | + | |
| - | STATUS=0 | + | |
| - | else | + | |
| - | echo "[-] Ошибка авторизации! Проверьте логин/пароль или конфигурацию Roundcube." | + | |
| - | STATUS=1 | + | |
| - | fi | + | |
| - | + | ||
| - | # ============================================================================== | + | |
| - | # ШАГ 4: Отключение (Выход) и очистка | + | |
| - | # ============================================================================== | + | |
| - | echo "3. Отключение и завершение сессии..." | + | |
| - | + | ||
| - | # Для выхода Roundcube использует GET-запрос с параметром _task=logout и валидным токеном | + | |
| - | # В новых версиях токен для logout может генерироваться заново, но отправка базового logout с куками завершает сессию | + | |
| - | curl -s -b "$COOKIE_JAR" "$ROUNDCUBE_URL/?_task=logout" > /dev/null | + | |
| - | + | ||
| - | # Удаляем временный файл с куками | + | |
| - | rm -f "$COOKIE_JAR" | + | |
| - | + | ||
| - | echo "=== Тестирование завершено ===" | + | |
| - | exit $STATUS | + | |
| - | </code> | + | |
| * Автор [[https://www.perplexity.ai/]] | * Автор [[https://www.perplexity.ai/]] | ||
| <code> | <code> | ||