编辑:我知道你永远不应该信任客户端...我的问题是我可以用什么来验证,因为在目前这一刻我期待三个参数,其中两个依赖于客户端表格(注册电子邮件和电子邮件)
我可能会以错误的方式解决这个问题,但似乎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
答案 0 :(得分:2)
您无法信任您的客户端代码,以防止客户端出现任何问题。永远不要相信客户。将每一个请求视为篡改和恶意。
即使你设法&#34;保护&#34;该功能,攻击者可以伪造整个请求。
验证您的参数serveride。
答案 1 :(得分:1)
以预先防止这种情况的方式构建您的注册过程。
首先,当注册表单提交给服务器时,检查具有该电子邮件地址的现有用户。如果存在,则返回错误消息。
如果用户不存在,请为该用户创建一条新记录,并将其标记为未激活。接下来,向用户发送一个注册电子邮件,其中包含一个URL,当单击该URL时,将激活该帐户。 请勿在此电子邮件中包含原始表单中的任何信息!
以这种方式设置,任何恶意用户都可以做的就是向某人发送一封激活邮件。
就重置密码表单而言,不应该使用它来向现有用户以外的用户发送电子邮件,因为您应该检查数据库中的电子邮件地址,然后使用数据库中的电子邮件地址而不是从形式。此外,您不应该在电子邮件中发送密码,而是在电子邮件中发送链接,将用户发送到可以输入新密码的页面。