Sha*_*10N 5 sql sql-server oracle sql-injection
DBMS_ASSERT是Oracle中防止SQL注入攻击的关键之一。我尝试了粗略搜索...是否有 SQL Server 2005/2008 等效于此功能?
我正在寻找一个特定的实现,它具有 DBMS_ASSERT 的所有相应 Oracle 包成员的对应项。
我知道防止注入的最佳实践...绑定变量...就是其中之一。
但是,在这个问题中,我专门寻找一种在不使用绑定变量的情况下清理输入的好方法。
有没有具体的实现方法?
是否有一个库实际上是 Oracle 包的 SQL Server 端口?
您拥有的唯一可能的选项是QUOTENAME
用于转义对象名称(因此可能是SIMPLE_SQL_NAME
或ENQUOTE_NAME
以及可能其他名称的等效项)。因此表名称(假设它们不符合所有者或数据库的限定)和列名称可以被转义。
没有一种机制可以完全限定对象(例如,将表“bob”转换为“database.owner.bob”),因此您必须手动将其放在一起,可以选择使用转义QUOTENAME
值,例如:
QUOTENAME(@database) + '.' + QUOTENAME(@owner) + '.' + QUOTENAME(@tableName)
如果该对象位于现有数据库中,那么您可以使用 DB_NAME(),并假设所有者将作为变量传入:
DB_NAME() + '.' + QUOTENAME(@owner) + '.' + QUOTENAME(@tablename)
通过一种非常复杂的方式,你也可以让所有者离开:
USER_NAME(OBJECTPROPERTY(OBJECT_ID(@tablename), 'ownerid')))
是的,我意识到所有这些都可以被视为解决方法,但它们都是选择。
然而,对于转义值,您确实需要自己解决:没有内置的 SQL Server 等效项,因此全部都是手动字符串操作。您也许能够创建一个 UDF 来执行此操作,但如果您打算这样做,那么可能也值得考虑使用 SQL Server sp_ExecuteSQL 语义重写存储过程。
归档时间: |
|
查看次数: |
2320 次 |
最近记录: |