【发布时间】:2018-05-04 19:42:08
【问题描述】:
我一直在尝试使我的 SQL Server 数据库与我的 aspx 项目一起工作。我为从我的网络表单文本字段中读取数据的用户创建了一个表格。但是,无论出于何种原因,它都会尝试将我的 Users 表 id 列分配给我的 Web 项目中的第一个文本框。我似乎想不出办法来解决它。你能帮帮我吗?
CREATE TABLE [dbo].[Users]
(
[Id] INT NOT NULL PRIMARY KEY,
[Username] NVARCHAR(MAX) NULL,
[Password] NVARCHAR(MAX) NULL,
[Email] NVARCHAR(MAX) NULL,
[Name] NVARCHAR(MAX) NULL
)
在这里我从 webform 分配值:
SqlCommand cmd = new SqlCommand("insert into Users values('" + tbUname.Text + "','" + tbPass.Text + "','" + tbEmail.Text + "','" + tbName.Text + "','u')", con);
网络表单标记:
<div class="center-page">
<label class="col-xs-11">Username</label>
<div class="col-xs-11">
<asp:TextBox ID="tbUname" runat="server" CssClass="form-control" placeholder="Username"></asp:TextBox>
</div>
<label class="col-xs-11">Password</label>
<div class="col-xs-11">
<asp:TextBox ID="tbPass" runat="server" CssClass="form-control" placeholder="Password"></asp:TextBox>
</div>
<label class="col-xs-11">Confirm Password</label>
<div class="col-xs-11">
<asp:TextBox ID="tbCPass" runat="server" CssClass="form-control" placeholder="Confirm Password"></asp:TextBox>
</div>
<label class="col-xs-11">Name</label>
<div class="col-xs-11">
<asp:TextBox ID="tbName" runat="server" CssClass="form-control" placeholder="Name"></asp:TextBox>
</div>
<label class="col-xs-11">E-Mail</label>
<div class="col-xs-11">
<asp:TextBox ID="tbEmail" runat="server" CssClass="form-control" placeholder="Email"></asp:TextBox>
</div>
<br />
<br />
<br />
<div class="col-xs-11 space-vert">
<asp:Button ID="btSignup" runat="server" class="btn btn-success" Text="Sign Up" OnClick="btSignup_Click" />
</div>
</div>
【问题讨论】:
-
SQL Injection alert - 您应该不将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看Little Bobby Tables
-
在您的插入语句中,您需要提供列列表。插入用户(用户名、密码、..)值(..)
-
另外:不要只是简单地将表格的每一列设为
NVARCHAR(MAX),因为您懒得考虑合适的大小 - 投入时间 并确保使用正确的数据类型和长度! -
如前所述,这是非常可怕的代码,因为它对 sql 注入非常开放。但是发生错误是因为您在插入语句的末尾有一个额外的值 'u'。那是为了什么?
-
密码永远不应该以纯文本形式存储。始终对您的密码进行散列和加盐并存储加密值。
标签: sql sql-server