Безопасный способ отправки почты через веб-службу (Restful)

У меня есть веб-приложение AngularJS с Java Backend.

Теперь я хочу отправить письмо из приложения Angular. Я подумал, что лучший способ - это отправить сообщение или получить запрос в веб-сервис и отправить письмо через внутренний SMTP-сервер получателю.

Но я думаю, что с этой концепцией есть большая проблема безопасности. Когда я создаю вызов веб-службы, как: /api/mail?mailto=john@doe.com кто-то может взять ссылку на веб-сервис, сменить получателя и воспользоваться этой ссылкой, чтобы начать рассылать спам другим людям.

Кто-нибудь знает безопасный способ для этой архитектуры отправлять почту через веб-сервис? Необходимо, чтобы я передал получателя почтовому сервису, потому что пользователь установил это в пользовательском интерфейсе AngularJS.

Я рад любому предложению.

2 ответа

Используйте Mailgun. Вы можете бесплатно отправлять 10000 электронных писем, вызывая API через свой бэкэнд Java, например:

public static ClientResponse SendSimpleMessage() {
    Client client = Client.create();
    client.addFilter(new HTTPBasicAuthFilter(
        "api","key-3ax6xnjp29jd6fds4gc373sgvjxteol0"));
    WebResource webResource = client.resource(
        "https://api.mailgun.net/v3/samples.mailgun.org/messages");
    MultivaluedMapImpl formData = new MultivaluedMapImpl();
    formData.add("from", "Excited User <excited@samples.mailgun.org>");
    formData.add("to", "john@doe.com");
    formData.add("subject", "Hello");
    formData.add("text", "Testing some Mailgun awesomeness!");
    return webResource.type(MediaType.APPLICATION_FORM_URLENCODED).
        post(ClientResponse.class, formData);
}

Это было бы более безопасно, чем ваша реализация. Я бы также отправил адрес электронной почты от клиента Angular на ваш бэкэнд Java как POST.

Вот меры безопасности, которые вы должны предпринять для обеспечения вашего отдыха API. REST Security Шпаргалка Вот список мер безопасности, которые вы должны предпринять для своего API отдыха.

  • HTTPS
  • Контроль доступа - Для контроля доступа вы можете использовать ключи API, OAuth и т. Д., Посмотрите эту статью https://stormpath.com/blog/secure-your-rest-api-right-way
  • Ограничить методы HTTP - Может быть обработано в контроллере.
  • Заголовки безопасности - используйте правильный заголовок безопасности для предотвращения CORS, CSRF-атак. (Атака, которую вы указали в своем вопросе). Посмотрите в этой статье https://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html.
  • Передача конфиденциальной информации в HTTP-запросе POST

Если вы используете Spring-Security, вы будете покрыты большей частью этого.

Другие вопросы по тегам