gpt4 book ai didi

.net - 如何编辑 'bit'数据类型?

转载 作者:搜寻专家 更新时间:2023-10-30 21:38:08 25 4
gpt4 key购买 nike

我正在用 Visual Basic 编写代码。我正在使用复选框控件。现在,根据其选中的属性,我需要在 SQL Server 数据库中设置/取消设置一个位列。这是代码:

Try
conSQL.Open()

Dim cmd As New SqlCommand("update Student set send_mail = " + _
sendemailCheckBox.Checked.ToString + " where student_id = '" _
+ sidnolabel.Text + "'", conSQL)

cmd.ExecuteNonQuery()
Finally
conSQL.Close()
End Try

send_mail 属性是位数据类型。此代码无效。我该怎么做?

最佳答案

我儿子在你们学校就读。他的名字是:

Robert'); DROP TABLE STUDENT; --

我们称他为小 Bobby Tables。


好的,我被告知这将被删除为 not an answer而且我需要倒在剑上或清理自己的烂摊子。虽然我会保留
我的代表如果它被删除我认为指出 OP 代码中的漏洞很重要(愿他的帐户安息)。所以让我详细说明...

让我们实际将 XKCD 漫画中的上述名称修复为实际适用于串联查询的名称(假设 OP 的 bool 问题已得到修复):

123; DROP TABLE STUDENT; --

如果我们将它添加到 sidnolabel 文本框(或任何它是什么;如果它在 View 状态中,您可以使用一个简单的工具更改它),得到的串联查询是

update Student   
set send_mail = 1
where student_id = 123; DROP TABLE STUDENT; --'

这将运行一个伪造的查询然后删除 Student 表。

这就是“不好”的定义。

OP 应该做的是使用参数化查询。这可以防止像这样的注入(inject)攻击。更新 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 注入(inject)攻击。不是吗?

*请注意,我不会使用 VB,也没有经过测试。任何想要编辑和修复错误的 VB.NET 开发人员,我将很乐意接受你的帮助。

关于.net - 如何编辑 'bit'数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1608127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com