【发布时间】:2018-11-04 07:39:40
【问题描述】:
最近我构建了一个查询,假设基于INNER JOIN 为我提供以下所有列,而UserID 的其他表是常见的,并计算它们以给我最常见的一次:
SELECT PhonesTBL.OperatingSystem
and PhonesTBL.Memory
and PhonesTBL.BatterySize
and PhonesTBL.CameraQuality
and PhonesTBL.Processor
and PhonesTBL.ScreenSize
and PhonesTBL.PhoneType
FROM
PhonesTBL
INNER JOIN
HistoryTBL ON PhonesTBL.PhoneID = HistoryTBL.PhoneID
WHERE
UserID = {0}
GROUP BY OperatingSystem
and Memory
and BatterySize
and CameraQuality
and Processor
and ScreenSize
and PhoneType
ORDER BY
Count(*) DESC
此查询返回 Expr1000。
【问题讨论】:
-
您出现 -
{0}- 正在使用String.format向您的 SQL 添加参数。这会让您面临 SQL 注入安全漏洞。永远不要这样做,始终使用参数化查询。 -
好吧,理查德,我正在为学校项目做这个,我不介意反对 sql 注入,谢谢你的提示,我很感激。
-
太多开发者盲目从Stack Overflow: 复制。因此,您认为快速测试/学习项目可能会产生后果。
-
请注意,这不是一个用于家庭作业项目的站点,它用于构建互联网工件。此外,作为不考虑项目而雇用开发人员的人,无论项目多么小或预期用途如何,都应该始终使用安全的编程模型;养成正确编程的习惯,并坚持下去。祝你好运!
-
请注意,使用参数化 SQL 的好处不仅仅是安全性。它有助于避免转换问题,并使您的代码更清晰。到目前为止,我衷心赞同 cmets,并鼓励您立即采用参数化查询。我知道当你刚开始的时候似乎有很多东西要学,但这是一个值得从一开始就“做正确的事”的地方。