【问题标题】:Secure way to send a mail via a (Restful) Webservice通过(Restful)Web 服务发送邮件的安全方式
【发布时间】:2017-09-22 06:39:36
【问题描述】:

我有一个带有 Java 后端的 AngularJS Web 应用程序。

现在我想从 Angular 应用程序中发送邮件。我认为最好的方法是向网络服务发送帖子或获取请求,然后通过内部 smtp 服务器将邮件发送给收件人。

但我认为这个概念存在很大的安全问题。当我创建一个网络服务调用时,例如:/api/mail?mailto=john@doe.com 有人可以获取网络服务的链接,更改收件人并获取此链接以开始向其他人发送垃圾邮件。

有人知道这种架构通过网络服务发送邮件的安全方式吗?我必须将收件人传递给邮件服务,因为用户在 AngularJS UI 中设置了这个。

我很高兴有任何建议。

【问题讨论】:

    标签: java angularjs web-services email


    【解决方案1】:

    以下是您应该采取的安全措施来保护您的 rest api。 REST Security Cheat Sheet 以下是您应该为您的 REST API 采取的安全措施列表。

    如果您使用 spring-security,您将了解其中的大部分内容。

    【讨论】:

    • 网络服务是公共网络应用程序的后端。如何在不要求凭据或不将应用程序哈希或类似内容放入 javascript 代码的情况下对其进行身份验证?
    • 你是说你的网络服务是公开的,没有安全措施吗?
    • 我认为我正在使用最常见的方式来保护 Web 服务:HTTPS、CORS 标头、限制 HTTP 方法、键入安全参数……但这一切都不会阻止攻击者获取链接并开始如我在顶部所述的垃圾邮件。但谢谢你的链接。我将看看CSRF。但我不确定这是否会阻止我描述的攻击。
    【解决方案2】:

    使用Mailgun。您可以免费发送 10,000 封电子邮件,您可以通过 Java 后端调用 API,如下所示:

    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 客户端的电子邮件地址作为 POST 发送到您的 Java 后端。

    【讨论】:

    • 将邮件发送到外部邮件服务器还是内部邮件服务器有什么区别?我认为没有区别。但我已经考虑过将邮件地址作为 POST 发送。但我认为在浏览器网络选项卡中我可以看到 API 调用并且攻击者可以重现它......
    • 这可能是因为如果您在本地运行它,您正在运行 localhost。也许看看this article
    猜你喜欢
    • 1970-01-01
    • 2011-04-18
    • 2015-10-29
    • 1970-01-01
    • 2012-03-13
    • 2012-01-21
    • 2020-04-03
    • 2012-09-18
    • 2012-11-19
    相关资源
    最近更新 更多