1

我正在使用 mysql 和 asp.net 将数据保存在 DB 中。当我在使用 server.HTMLEncode() 后将数据保存在 DB 中时,删除 \ 后将保存数据。这就是我保存数据的方式

INSERT INTO Users(ID,Name) Values(1,Server.HTMLEncode(User.Identity.Name)) 

在这种情况下,如果名称为 XXX\ABC ,则将其保存为 XXXABC。保存在数据库中时会删除斜线。

下次当我阅读相同内容时,我需要检查登录用户是否是我保存数据的那个人,所以我会关注

if ( existingRowEditor == Server.HtmlEncode(User.Identity.Name))
{

}

但问题是上述条件总是错误的,因为我有以下值 existingRowEditor="XXXABC"Server.HtmlEncode(User.Identity.Name) =XXX\\ABC.

那么如何检查上述条件是否为真呢?

4

2 回答 2

1

HTML 编码不适用于对数据进行编码以存储在数据库中。

反斜杠消失的原因是您将 SQL 代码粘贴在一起,并对文本进行编码以显示在网页中,而不是将其转义为 SQL 查询中的文本。反斜杠在 MySQL 中用作转义字符,因此字符串中的任何反斜杠都会转义下一个字符。

最好使用参数化查询,而不是将数据连接到 SQL 查询中。如果这是不可能的,您必须正确地转义文本以在 SQL 代码中的字符串文字中,因此您必须用双反斜杠替换每个反斜杠,并在每个撇号前面加上一个反斜杠。如果您未能正确转义它,您的应用程序将很容易受到 SQL 注入攻击。

HTML 编码值应该在您将其显示在网页中时完成,而不是在您将其放入数据库之前。

于 2013-04-09T06:07:38.053 回答
0

您可以使用以下内容:

var sqlQueryString = "INSERT INTO Users(ID,Name) Values(@Id,@Name)";
var sqlCommand = new SqlCommand(sqlQueryString, sqlConnection);
sqlCommand.Parameters.Add(new SqlParameter("Id", 1);
sqlCommand.Parameters.Add(new SqlParameter("Name", User.Identity.Name);
sqlCommand.ExecuteNonQuery();
于 2013-04-09T06:23:05.370 回答