我儿子在你们学校就读。他的名字是:
罗伯特');掉表学生; --
我们称他为小 Bobby Tables。
好的,有人告诉我这将被删除为not an answer,我需要自食其力或收拾自己的烂摊子。虽然我会保留
如果我的代表被删除,我认为指出 OP 代码中的漏洞很重要(愿他的帐户安息) .所以让我详细说明...
让我们将 XKCD 漫画中的上述名称实际修复为实际上可以对抗串联查询的名称(假设 OP 的布尔问题已得到修复):
123;掉表学生; --
如果我们在 sidnolabel 文本框中添加它(或其他任何内容;如果它处于视图状态,您可以使用简单的工具更改它),生成的连接查询是
update Student
set send_mail = 1
where student_id = 123; DROP TABLE STUDENT; --'
这将运行一个虚假查询,然后删除 Student 表。
这就是“不好”的定义。
OP 应该做的是使用参数化查询。这可以防止像这样的注入攻击。正在更新 OP 的代码...
Try
conSQL.Open()
Dim cmd As New SqlCommand(
"update Student " + _
"set send_mail = @sendMail " + _
"where student_id = @studentId", conSQL)
cmd.Parameters.Add( _
"@sendMail", SqlDbType.Bit).Value = _
sendemailCheckBox.Checked
cmd.Parameters.Add( _
"@studentId", SqlDbType.NChar, 25).Value = _
sidnolabel.Text ' better to keep track of this in the Session!
cmd.ExecuteNonQuery()
Finally
conSQL.Close()
End Try
这应该解决 OP 的问题和防止 sql 注入攻击。不是吗?
*请注意,我不是VB,也没有经过测试。任何想要编辑和修复错误的 VB.NET 开发人员都将很乐意接受您的帮助。