Sql server 对于到SQL Server的MS Access直通查询,我需要什么字符

Sql server 对于到SQL Server的MS Access直通查询,我需要什么字符,sql-server,vba,ms-access,pass-through,php,sql,Sql Server,Vba,Ms Access,Pass Through,Php,Sql,我正在尝试将MS Access与SQL Server连接,我希望确保自己不易受到SQL注入攻击 我看到过使用ADO创建查询的参数化版本的建议,但我想学习如何使用DAO传递来清理输入 目前,我正在逃避单引号和反斜杠 VBA中是否有标准的SQL Server注入方法 VBA中是否有标准的SQL Server注入方法 没有。如果有,我会非常担心。我不做PHP,但我读过关于它的“标准SQL注入方法”的恐怖故事。只要看一眼标有and的问题——相当多的人都在问“这段代码安全吗?”,除非他们使用事先准备好的语

我正在尝试将MS Access与SQL Server连接,我希望确保自己不易受到SQL注入攻击

我看到过使用ADO创建查询的参数化版本的建议,但我想学习如何使用DAO传递来清理输入

目前,我正在逃避单引号和反斜杠

VBA中是否有标准的SQL Server注入方法

VBA中是否有标准的SQL Server注入方法

没有。如果有,我会非常担心。我不做PHP,但我读过关于它的“标准SQL注入方法”的恐怖故事。只要看一眼标有and的问题——相当多的人都在问“这段代码安全吗?”,除非他们使用事先准备好的语句,否则答案总是“不”

”)--删除表用户--
用户名
数据库字段中是一个值得怀疑的值(您认为这个答案的文本存储在哪里?),但如果您正确编写了数据访问代码,即使您的登录被授权(服务器端)执行这样的语句,也没有理由造成任何混乱

问题不在于用户的输入。问题是将用户输入连接到可执行SQL,从而将用户输入视为可执行代码


您想要的是执行一个常量SQL语句。执行此操作时:

”***不要这样做***
将sql设置为字符串
sql=“从dbo.Users中选择Id,其中UserName=”&pName&“;”
然后,每次将SQL语句发送到服务器时,它都是一个不同的查询:服务器甚至不知道涉及到一个参数,它只看到以下内容:

从dbo.Users中选择Id,其中UserName=''--删除表用户;--;
注意额外的单引号;如果你想,嘿,SQL注入被阻止了,你忘记了这并不是因为你不能阻止输入净化,没有人可以。很多公司都有面向世界的网站使用这种“注射预防”,并认为他们的代码是安全的。当他们在推特上吹嘘自己“十多年来都没有被黑客入侵过”时,全球各地的脚本小子需要几分钟的时间才能把它取下来。不必费心去挖掘一个链接,但这个确切的故事发生在最近

通过ADO发送参数化查询时,服务器会收到以下内容:

从dbo.Users中选择Id,其中UserName=?;
请注意,查询不知道甚至不需要关心参数的类型及其周围的单引号

请注意,无论用户输入是什么,它都是相同的语句

请注意,参数值在该查询的执行计划中的任何地方都没有涉及到。参数是单独接收的,由数据库服务器以一种完全安全的方式进行处理,由以此为生的人编写

无论你怎么努力,你或任何人都无法想出安全的消毒方法。

如果用户输入是可执行SQL语句的一部分,则它是不安全的

不要假装做服务器的工作。别这样。
做对了。 学习使用ADODB
命令
参数
对象。它们有一个相当简单的API,正确且一致地使用它们将击败任何字符串连接的伪净化SQL字符串

下面是一个详细的示例:

Const sql As String=“从dbo.Users中选择Id,其中UserName=?;”
Dim conn作为ADODB连接
Set conn=新的ADODB.连接
conn.ConnectionString=“{connection string}”
康涅狄格州公开赛
Dim cmd作为ADODB.Command
Set cmd=New ADODB.Command
cmd.CommandType=adCommandText
cmd.CommandText=sql
cmd.ActiveConnection=conn
Dim userNameParam作为ADODB.Parameter
Set userNameParam=New ADODB.Parameter
userNameParam.Type=adVarChar
userNameParam.Size=60
userNameParam.Direction=adParamInput
userNameParam.Value=pUserName'
VBA中是否有标准的SQL Server注入方法

没有。如果有,我会非常担心。我不做PHP,但我读过关于它的“标准SQL注入方法”的恐怖故事。只要看一眼标有and的问题——相当多的人都在问“这段代码安全吗?”,除非他们使用事先准备好的语句,否则答案总是“不”

”)--删除表用户--
用户名
数据库字段中是一个值得怀疑的值(您认为这个答案的文本存储在哪里?),但如果您正确编写了数据访问代码,即使您的登录被授权(服务器端)执行这样的语句,也没有理由造成任何混乱

问题不在于用户的输入。问题是将用户输入连接到可执行SQL,从而将用户输入视为可执行代码


您想要的是执行一个常量SQL语句。执行此操作时:

”***不要这样做***
将sql设置为字符串
sql=“从dbo.Users中选择Id,其中UserName=”&pName&“;”
然后,每次将SQL语句发送到服务器时,它都是一个不同的查询:服务器甚至不知道涉及到一个参数,它只看到以下内容:

从dbo.Users中选择Id,其中UserName=''--删除表用户;--;
注意额外的单引号;如果你想,嘿,SQL注入被阻止了,你忘记了这并不是因为你不能阻止输入净化,没有人可以。许多公司都有面向世界的网站使用这种“注射预防”,并认为他们的代码是安全的