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で使用する必要があります。クッキーを設定して認証として使用することを検討しましたが、それはこれまでのところです。ajaxメソッドを保護するための標準的な手順はありますか?

4

4 に答える 4

2

サーバー上で、パラメーターが希望どおりであることを検証する必要があります。

于 2013-02-11T20:45:53.073 に答える
0

あなたの要件は相互に排他的に聞こえます。

公開したままにしたいが、悪用したくない場合は、特定の IP アドレスからの x 数のリクエストのみを許可する、ある種のスロットルを提供できます。

また、HTML フォームで mailto: を使用して、クライアントに電子メールの送信を促すこともできます。

于 2013-02-11T21:08:44.763 に答える
0

権限のないユーザー (有効なセッションを持たないユーザー) が電子メールを送信できないようにするには、安全なセッション トークンを実装する必要があります。これは基本的に、他のクロス サイト リクエスト フォージェリ (CSRF) 攻撃ベクトルと同じです。追加情報が必要な場合は、Google 'CSRF protection ASP.NET` などで、これを行う方法のより具体的な例を取得してください。

于 2013-02-11T20:51:13.873 に答える
0

最初に、コントローラーにアクセスしたIPをいつでも保存できます。同じIPが、定義した特定の頻度でメールを送信しようとしている場合、それをブロックすることを決定できます...すぐに、メールで乱数を生成できますコントローラーに送信されるページ -> これにより、メールがサードパーティからではなく、サイトから送信されたことを確認できます

于 2013-02-11T21:40:34.507 に答える