Ajax安全性和代码隐藏功能

时间:2014-04-02 18:50:39

标签: javascript jquery .net ajax

编辑:我知道你永远不应该信任客户端...我的问题是我可以用什么来验证,因为在目前这一刻我期待三个参数,其中两个依赖于客户端表格(注册电子邮件和电子邮件)

我可能会以错误的方式解决这个问题,但似乎Ajax并不是非常安全的(好吧......它的客户端......)你将如何创建一个函数?所以它不能被入侵者通过控制台调用?

所以,让我说我有一个名为SendMail的函数,它接受to,message和from参数,在这些参数中,它向后面的代码发送ajax请求以发送电子邮件。

我可以添加哪些内容会阻止您打开控制台,重新创建我的函数(文字变量除外)并通过控制台执行它?

代码背后:

<WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Json)>
Public Shared Sub sendMail(subject As String, userEmail As String(), message As String)
    Dim fromEmail As String = "supah@domain.com"
    Dim fromAbrv As String = "hidden Tiger"
    Try
        Dim mail As New MailMessage()
        Dim smtp As New SmtpClient("server.domain")
        mail.From = New MailAddress(fromEmail, fromAbrv)
        For i As Integer = 0 To userEmail.Length - 1
            mail.[To].Add(userEmail(i))
        Next
        mail.Subject = subject
        mail.Body = message
        mail.IsBodyHtml = True
        smtp.Send(mail)
    Catch exc As Exception
        Throw exc
    End Try

End Sub

2 个答案:

答案 0 :(得分:2)

您无法信任您的客户端代码,以防止客户端出现任何问题。永远不要相信客户。将每一个请求视为篡改和恶意。

即使你设法&#34;保护&#34;该功能,攻击者可以伪造整个请求。

验证您的参数serveride。

答案 1 :(得分:1)

以预先防止这种情况的方式构建您的注册过程。

首先,当注册表单提交给服务器时,检查具有该电子邮件地址的现有用户。如果存在,则返回错误消息。

如果用户不存在,请为该用户创建一条新记录,并将其标记为未激活。接下来,向用户发送一个注册电子邮件,其中包含一个URL,当单击该URL时,将激活该帐户。 请勿在此电子邮件中包含原始表单中的任何信息!

以这种方式设置,任何恶意用户都可以做的就是向某人发送一封激活邮件。

就重置密码表单而言,不应该使用它来向现有用户以外的用户发送电子邮件,因为您应该检查数据库中的电子邮件地址,然后使用数据库中的电子邮件地址而不是从形式。此外,您不应该在电子邮件中发送密码,而是在电子邮件中发送链接,将用户发送到可以输入新密码的页面。