Asp classic 经典asp请求单引号输入

Asp classic 经典asp请求单引号输入,asp-classic,vbscript,Asp Classic,Vbscript,我正在尝试读取一个文本区域(id=Message)并将其保存到数据库中。问题是,如果用户在文本中输入一个引号('),下面的两个代码都无法处理它 Request("Message") 或 两者都失败,并显示错误消息 Security violation occurred Incorrect value was passed for field "Message" 似乎它在读取请求(“消息”)时就会失败。您应该使用命令对象将用户输入的数据安全地保存到数据库中 set cmd = Server.

我正在尝试读取一个文本区域(id=Message)并将其保存到数据库中。问题是,如果用户在文本中输入一个引号('),下面的两个代码都无法处理它

Request("Message")

两者都失败,并显示错误消息

Security violation occurred
Incorrect value was passed for field "Message"


似乎它在读取请求(“消息”)时就会失败。

您应该使用命令对象将用户输入的数据安全地保存到数据库中

set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = conn
cmd.CommandText = "INSERT INTO table(message) VALUES(?)"
cmd.CommandType = 1
recordsAffected = 0
call cmd.Execute(recordsAffected, array(Request("Message")&""))

if recordsAffected <> 1 then
  Response.Write "Something went wrong!"
else
  Response.Write "Data saved!"
end if
set cmd=Server.CreateObject(“ADODB.Command”)
设置cmd.ActiveConnection=conn
cmd.CommandText=“插入表(消息)值(?)
cmd.CommandType=1
recordsAffected=0
调用cmd.Execute(recordsAffected,数组(请求(“消息”)和“”)
如果recordsAffected 1,则
回答:写“出了什么问题!”
其他的
回答。写“数据已保存!”
如果结束

上面的代码假设您与存储在变量conn中的数据库有一个打开的连接。

我怀疑这可能是一种主机级别的安全措施,用于防止SQL注入。如果是这种情况,唯一的解决方案可能是要求您的主机禁用它(并保护您自己),或者在提交表单时添加一些JavaScript替换或HTML编码撇号

您是在本地计算机上测试此功能,还是仅在由web托管公司托管的站点上测试此功能?

为什么不使用标准替换(请求(“消息”),“,”,“?”?您没有使用参数吗?我不知道“字段传递的值不正确”是ASP或活动脚本环境中的错误消息。您使用的是IIS的ASP,还是像Chilisoft ASP这样的第三方实现?
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = conn
cmd.CommandText = "INSERT INTO table(message) VALUES(?)"
cmd.CommandType = 1
recordsAffected = 0
call cmd.Execute(recordsAffected, array(Request("Message")&""))

if recordsAffected <> 1 then
  Response.Write "Something went wrong!"
else
  Response.Write "Data saved!"
end if