0

假设我在 c# MVC 中有一个使用 ajax 发送电子邮件的方法,例如:

public class mailController : Controller {

        SmtpClient mailserver = new SmtpClient("smtp.foo.com");

        public string send(string from, string to, string subject = "", string body = "", string cc = "", string bcc = "") {
            MailMessage message = new MailMessage(from, to, subject, body);
            if (cc.Length > 0) {
                message.CC.Add(cc);
            }
            if (bcc.Length > 0) {
                message.Bcc.Add(bcc);
            }
            mailserver.Send(message);
            return "MessageSent";
        }
    }

我能做些什么来使这更安全吗?我的意思是,就目前而言,任何人都可以在他们的地址栏中输入相关信息。http://www.foo.com/mail/send?from=etc如果我想用它来提交表单,我不能用密码保护它,或者我必须在很容易找到的 javascript 中使用它。我考虑过设置一个 cookie 并将其用作身份验证,但仅此而已。是否有保护 ajax 方法的标准程序?

4

4 回答 4

2

您需要在服务器上验证参数是否符合您的要求。

于 2013-02-11T20:45:53.073 回答
0

您需要实施安全会话令牌,以防止未经授权的用户(没有有效会话的用户)能够发送电子邮件。这基本上与任何其他跨站点请求伪造 (CSRF) 攻击向量没有什么不同。如果您需要任何其他信息,只需 Google 'CSRF protection ASP.NET`' 或类似内容,以获取有关如何执行此操作的更具体示例。

于 2013-02-11T20:51:13.873 回答
0

您的要求听起来是相互排斥的。

如果您确实想公开它,但又不希望它被滥用,那么也许您可以提供某种限制,只允许来自特定 IP 地址的 x 个请求。

您还可以在 HTML 表单中使用 mailto: 来提示客户端发送电子邮件。

于 2013-02-11T21:08:44.763 回答
0

首先,您始终可以存储访问您的控制器的 IP,如果相同的 IP 试图以您定义的特定频率发送邮件,您可以决定以任何方式阻止它......其次,您可以在邮件中生成一个随机数将发送到控制器的页面 -> 这将允许您验证邮件是从您的站点发送的,而不是从第三方发送的

于 2013-02-11T21:40:34.507 回答