T-SQL括号单引号和sql注入

时间:2018-05-02 03:28:58

标签: sql-server tsql sql-injection

考虑:

CString username="john['dow";
CString password="mypass";
ExecSQL("CREATE LOGIN ["+username+"] WITH PASSWORD = '"+password+"', CHECK_POLICY = OFF, DEFAULT_DATABASE = Voyager, CHECK_EXPIRATION = OFF"));

(其中ExecSQL在SQL服务器数据库上执行SQL)

使用括号作为用户名,因为它可能包含一个点

我检查密码不包含单引号(但我知道它可以安全地包含任何其他字符?)

我检查了用户名不包含结束括号。

是否有其他字符对用户名不安全?在这种情况下,特别是用户名的开放括号或单引号不安全?

由于

1 个答案:

答案 0 :(得分:-1)

阅读本文,它将为您提供用户名和密码的最佳做法:

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-login-transact-sql?view=sql-server-2017#arguments

<强> LOGIN_NAME 指定创建的登录名。登录有四种类型:SQL Server登录,Windows登录,证书映射登录和非对称密钥映射登录。在创建从Windows域帐户映射的登录时,必须使用格式为[\]的Windows 2000以前的用户登录名。您不能以login_name @ DomainName格式使用UPN。有关示例,请参阅本主题后面的示例D. SQL Server身份验证登录的类型为sysname,必须符合Identifiers的规则,并且不能包含“\”。 Windows登录可以包含'\'。基于Active Directory用户的登录仅限于少于21个字符的名称。

PASSWORD ='密码' 仅适用于SQL Server登录。指定正在创建的登录的密码。您应该使用强密码。有关更多信息,请参阅强密码和密码策略。从SQL Server 2012(11.x)开始,使用盐渍密码的SHA-512计算存储的密码信息。

密码区分大小写。密码长度应始终至少为8个字符,且不能超过128个字符。密码可以包括a-z,A-Z,0-9和大多数非字母数字字符。密码不能包含单引号或login_name。

PASSWORD = hashed_pa​​ssword 适用于:SQL Server 2008到SQL Server 2017。

仅适用于HASHED关键字。指定正在创建的登录名的密码的哈希值。