提问人:kofifus 提问时间:5/2/2018 更新时间:5/2/2018 访问量:367
T-SQL 括号单引号和 sql 注入 [重复]
T-SQL brackets single quote and sql injection [duplicate]
问:
考虑:
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 Server 数据库上执行 SQL)
使用括号作为用户名,因为它可能包含一个点
我检查密码不包含单引号(但我知道它可以安全地包含任何其他字符?
我检查用户名不包含右括号。
有没有其他字符对用户名不安全?特别是在这种情况下,左括号或单引号对用户名不安全吗?
谢谢
答:
仔细阅读本文,它将为您提供用户名和密码的最佳实践:
Login_name指定创建的登录名的名称。有四种类型的登录名:SQL Server 登录名、Windows 登录名、证书映射登录名和非对称密钥映射登录名。创建从 Windows 域帐户映射的登录名时,必须使用 Windows 2000 之前的用户登录名,格式为 [\]。不能使用 login_name@DomainName 格式的 UPN。有关示例,请参阅本主题后面的示例 D。SQL Server 身份验证登录名的类型为 sysname,必须符合标识符的规则,并且不能包含“\”。Windows 登录名可以包含“\”。基于 Active Directory 用户的登录名限制为少于 21 个字符的名称。
密码 ='password'仅适用于 SQL Server 登录名。指定正在创建的登录名的密码。您应该使用强密码。有关详细信息,请参阅强密码和密码策略。从 SQL Server 2012 (11.x)SQL Server 2012 (11.x)SQL Server 2012 (11.x)SQL Server 2012 (11.x)SQL Server 2012 (11.x)SQL Server 2012 (11.x)SQL Server 2012 (11.x)SQL Server 2012 (11.x)SQL Server
密码区分大小写。密码长度应始终至少为 8 个字符,并且不能超过 128 个字符。密码可以包括 a-z、A-Z、0-9 和大多数非字母数字字符。密码不能包含单引号或login_name。
密码 =hashed_password适用范围:SQL Server 2008 到 SQL Server 2017。
仅适用于 HASHED 关键字。指定正在创建的登录名的密码的哈希值。
评论
CREATE LOGIN