联邦登录(例如OpenID)会带来SQL注入风险吗?

联邦登录(例如OpenID)会带来SQL注入风险吗?,openid,sql-injection,dotnetopenauth,federated-identity,Openid,Sql Injection,Dotnetopenauth,Federated Identity,是否可以安全地假设所有身份提供者都会清理用户信息,或者是否可以创建一个帐户或身份提供者来传递恶意用户名、电子邮件、联系人列表等 不要以为其他人会为您清理数据。自己动手,或者(更好地)以一种通过正确编码参数来防止SQL注入的方式连接到数据库。永远不要假设其他人会为您清理数据。您可以自己操作,或者(更好地)以一种通过正确编码参数来防止SQL注入的方式连接到您的数据库。我们有几个人的电子邮件地址中有撇号,这不是无效的……问题不是撇号,而是编码人员没有使用参数化查询和/或存储过程。实际上,现在没有人应该

是否可以安全地假设所有身份提供者都会清理用户信息,或者是否可以创建一个帐户或身份提供者来传递恶意用户名、电子邮件、联系人列表等

不要以为其他人会为您清理数据。自己动手,或者(更好地)以一种通过正确编码参数来防止SQL注入的方式连接到数据库。

永远不要假设其他人会为您清理数据。您可以自己操作,或者(更好地)以一种通过正确编码参数来防止SQL注入的方式连接到您的数据库。

我们有几个人的电子邮件地址中有撇号,这不是无效的……问题不是撇号,而是编码人员没有使用参数化查询和/或存储过程。实际上,现在没有人应该使用内联SQL并连接字符串,这将阻止几乎所有的SQL注入攻击


如果您必须在例如SQL Server中使用动态SQL,则使用带有参数的
sp_executeSQL
,而不是
EXEC

我们有几个人的电子邮件地址中有撇号,这不是无效的…问题不是撇号,而是编码人员没有使用参数化查询和/或存储过程。实际上,现在没有人应该使用内联SQL并连接字符串,这将阻止几乎所有的SQL注入攻击


如果您确实必须在例如SQL Server中使用动态SQL,则使用带有参数的
sp_executeSQL
,而不是
EXEC

即使它们不允许使用此类字符,即使规范禁止使用此类字符,您也不应该依赖于此


当您收到数据时,确保数据符合您的期望。另外,请注意安全,始终使用准备好的语句/参数化查询,无需转义参数,或者如果不可能,转义查询参数。习惯这样做,你就不会有令人不快的惊喜。

即使他们不允许使用此类字符,即使规范禁止使用此类字符,你也不应该依赖于此


当您收到数据时,确保数据符合您的期望。另外,请注意安全,始终使用准备好的语句/参数化查询,无需转义参数,或者如果不可能,转义查询参数。养成这样做的习惯,你就不会有令人不快的惊喜。

现有供应商的可信度是不相关的。攻击者可以编写自己的身份提供程序,并使用它向您发送他们想要的任何内容。您几乎不应该信任第三方数据。

现有提供商的可信度与之无关。攻击者可以编写自己的身份提供程序,并使用它向您发送他们想要的任何内容。实际上,您永远不应该信任第三方数据。

动态SQL有一些有效的用例,可以说永远不应该使用它是天真的。在最后一段之前,我在哪里提到动态SQL?这意味着,您说使用存储过程或参数化查询以外的任何东西都是错误的,默认情况下,唯一的其他东西是动态SQL。许多由ORM框架构建的
SELECT
查询依赖于动态SQL,这是实现所需功能的唯一方法。唯一的方法是根据输入动态构建查询字符串。ORM使用参数化的动态查询,下面是一个nhibernate示例“exec sp_executesql N”选择region0.RegionId作为RegionId0,region0.RegionDescription作为RegionD2_0”,其中(region0.RegionDescription像@p0),N'@p0 nvarchar(4),@p0=N'zon%'1'@sqlmeanse谢谢!我对SQL最佳实践一无所知,所以你的文章指出了一些我需要扩展的知识领域。对于动态SQL来说,有一些有效的用例可以说永远不应该使用它是天真的。我在最后一段之前在哪里提到动态SQL?这是暗示,如果说使用存储过程或参数化查询以外的任何东西都是错误的,那么默认情况下唯一的另一件事就是动态SQL。许多由ORM框架构建的
SELECT
查询依赖于动态SQL,这是实现所需功能的唯一方法。唯一的方法是根据输入动态构建查询字符串。ORM使用参数化的动态查询,下面是一个nhibernate示例“exec sp_executesql N”选择region0.RegionId作为RegionId0,region0.RegionDescription作为RegionD2_0”,其中(region0.RegionDescription像@p0),N'@p0 nvarchar(4),@p0=N'zon%'1'@sqlmeanse谢谢!我对SQL最佳实践一无所知,所以你的文章指出了一些我需要扩展的知识领域。很高兴知道。这与我一小时前的回答完全相同:(我本应该把我的问题表达得更清楚些。很高兴知道。这与我一小时前的回答完全相同:(