Recentemente, respondi uma pergunta com o seguinte exemplo de código:
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 + '%';
Enquanto escrevia a última linha, me perguntei se concatenar EmailDomain
a coluna com o símbolo curinga era uma abertura para injeção de SQL. Isso é algo que devo observar com esse tipo de código ou o SQL Server avaliará isso como um único parâmetro unificado para que não precise me preocupar em usar essa abordagem?
Não. Esse valor sempre será interpretado como uma string e não há como colocar nada na
emaildomain
coluna que possa fazer a consulta executar um código inesperado. Ou vai encontrar correspondências ou não.Claro, isso é relevante para o exemplo de código específico que você postou, e apenas isso. Você deve sempre se preocupar com quaisquer dados que você aceita de um usuário... já que você pode não saber onde mais eles podem ser usados agora ou no futuro.