Ajax 安全性和代码隐藏函数

Ajax Security and code-behind functions

本文关键字:隐藏 函数 代码 安全性 Ajax      更新时间:2023-09-26

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

我可能以错误的方式做到这一点,但似乎 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

你不能相信你的客户端代码来阻止客户端做任何事情。永远不要信任客户。将每个请求视为篡改和恶意请求。

即使您设法"保护"该功能,攻击者也可以伪造整个请求。

验证服务器端的参数。

预先

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

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

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

以这种方式设置后,任何恶意用户最多可以向某人发送一封激活电子邮件。

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