Защитите ваше приложение Sinatra, проверяя входящие запросы от Twilio

Автор: | 05.08.2026

Если вам нужна помощь с настройкой среды разработки для Ruby, ознакомьтесь с документацией по установке.

Мы начнем с базового примера кода, реализующего приложение на Sinatra.

Запуск примера кода:

`$ ruby index.rb`

Это приложение возвращает TwiML на любой запрос к «/» без какой-либо проверки:

«`

$ curl -XPOST http://localhost:4567

Hello World

«`

«`

# Ваш Twilio Auth Token можно найти здесь: https://www.twilio.com/console

# Установите во время выполнения следующим образом:

# $ TWILIO_AUTH_TOKEN=»XXXXXXXXXXXXXXXXXXX» ruby index.rb

#

# Это не сработает, если не экспортировать переменную окружения TWILIO_AUTH_TOKEN.

require ‘sinatra’

require ‘twilio-ruby’

post ‘/’ do

content_type ‘text/xml’

response = Twilio::TwiML::MessagingResponse.new

response.message(‘Hello World’)

response

end

«`

Чтобы добавить проверку запросов в ваше приложение Sinatra, вам понадобится токен аутентификации.

Нам потребуется токен аутентификации для Twilio API из Twilio Console, и этот токен будет установлен путем экспорта новой переменной окружения:

«`

$ export TWILIO_AUTH_TOKEN=»TWILIO_AUTH_TOKEN_HERE»

«`

Для включения проверки запросов через Rack middleware добавьте следующую строку:

`use Rack::TwilioWebhookAuthentication, ENV[‘TWILIO_AUTH_TOKEN’], ‘/’`

«`

# Ваш Twilio Auth Token можно найти здесь: https://www.twilio.com/console

# Установите во время выполнения следующим образом:

# $ TWILIO_AUTH_TOKEN=»XXXXXXXXXXXXXXXXXXX» ruby index.rb

#

# Это не сработает, если не экспортировать переменную окружения TWILIO_AUTH_TOKEN.

require ‘sinatra’

require ‘twilio-ruby’

require ‘rack’

# Для настройки переменных окружения см. http://twil.io/secure

use Rack::TwilioWebhookAuthentication, ENV[‘TWILIO_AUTH_TOKEN’], ‘/’

post ‘/’ do

content_type ‘text/xml’

response = Twilio::TwiML::MessagingResponse.new

response.message(body: ‘Адрес магазина: ул. Легкая, 123.’)

response

end

«`

На данный момент пример расширился и включает безопасную аутентификацию запросов Twilio с использованием вашего токена аутентификации.

Мы можем проверить, что проверка запросов работает, повторив предыдущий шаг с `curl`:

«`

$ curl -XPOST http://localhost:4567

Twilio Request Validation Failed.

«`

Подтвердите подлинность входящих запросов к вашему приложению Sinatra с помощью этой пользовательской логики проверки. Она вернет ` Hello World`,

если запрос корректен, или `Twilio Request Validation Failed.`,

если он некорректен. Затем логика либо продолжает обработку запроса, либо возвращает ошибку 403 HTTP для недействительных попыток.

Если вы пишете тесты для своего приложения Sinatra, эти тесты могут не проходить для маршрутов, где используется проверка запросов Twilio. Чтобы решить эту проблему, рекомендуем использовать библиотеку для мокинга в ваших тестах. Ознакомьтесь с официальной документацией Rack для мокинга запросов и ответов.

Проверка запросов к вашим вебхукам Twilio — это отличный первый шаг для обеспечения безопасности вашего приложения Twilio. Рекомендуем ознакомиться с полной документацией по безопасности для получения дополнительных советов по защите вашего приложения, а также с Руководством разработчика по борьбе с мошенничеством.

Чтобы узнать больше о защите вашего приложения Sinatra в целом, ознакомьтесь со страницей рекомендаций по безопасности в официальной документации Sinatra, а также с официальной документацией Rack и Twilio Ruby SDK.