正如主题所示,我希望能够使用 .NET(实际上使用哪种语言)和 SQL Server 将表名作为参数传递。
我知道如何为价值观做到这一点,例如command.Parameters.AddWithValue("whatever", whatever)
using @whatever
在查询中表示参数。问题是我现在的情况是希望能够对查询的其他部分(例如列名和表名)执行此操作。
这不是一种理想的情况,但这是我必须使用的情况,它不太容易发生 SQL 注入,因为只有使用代码的人才能设置这些表名称,而最终用户不能。然而它很混乱。
那么,我所问的可能吗?
编辑:为了清楚地说明 SQL 注入的要点,表名仅通过源代码传入,具体取决于情况。这是由开发者指定的。无论如何,开发人员都可以访问数据库层,所以我问的原因并不是为了安全,而是为了使代码更干净。
您不能直接参数化表名称。您可以通过以下方式间接完成sp_ExecuteSQL
,但您也可以用 C# 构建(参数化)TSQL(连接表名但不连接其他值)并将其作为命令发送下来。您获得相同的安全模型(即您需要显式 SELECT 等,并假设它未签名等)。
另外 - 请务必将表名称列入白名单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)