我最近用以下代码示例回答了一个问题:
Create Table #Testing
(
emaildomain varchar(100) -- Still bigger than functionally needed but better than MAX
);
INSERT INTO #Testing VALUES (REVERSE('@myfreepaysite.com')); -- Changed
Create Table #DataToCheck
(
fullemail varchar(200) -- Still bigger than functionally needed but better than MAX
);
Insert Into #DataToCheck VALUES(REVERSE('[email protected]')); --Changed
Select Top 1
REVERSE(fullemail)
, REVERSE(emaildomain)
FROM #DataToCheck
INNER JOIN #Testing ON fullemail LIKE emaildomain + '%';
在我写最后一行时,我想知道EmailDomain
用通配符连接列是否为 SQL 注入打开了大门。这是我应该注意这种类型的代码,还是 SQL Server 会将其评估为单个统一参数,这样我就不必担心使用这种方法?
不会。该值将始终被解释为字符串,并且无法将任何内容放入
emaildomain
可能使查询执行意外代码的列中。它要么会找到匹配项,要么不会。当然,这与您发布的特定代码示例有关,仅此而已。您应该始终关注您从用户那里接受的任何数据……因为您可能不知道现在或将来可能在其他地方使用它。