gpt4 book ai didi

sql - sql注入(inject)场景中格式化函数与参数?

转载 作者:行者123 更新时间:2023-12-03 14:49:41 25 4
gpt4 key购买 nike

我知道sql语句中参数的使用,但出于好奇,使用Format函数来防止sql注入(inject)是安全的,而不是使用参数。

喜欢这个示例

sCustomer : string
begin
AdoSql.CommandText:=Format('Select SUM(value) result from invoices where customer=%s',[QuotedStr(sCustomer)]);
end;

最佳答案

假设 QuotedStr 按预期工作并且不存在可以破坏它的边缘情况,那么这可能可以安全地防止 SQL 注入(inject)。 (这绝不是保证的。正如 Linas 在评论中指出的那样,MySql 允许您使用 \' 来转义引号。其他 DBMS 可能具有类似的功能。对系统有足够理论知识的攻击者将能够利用它们。)

但是,即使 QuotedStr 足够好,出于不同的原因使用参数仍然更好:性能。当您将参数与查询分开时,您最终可能会使用不同的参数多次发送完全相同的查询代码。如果这样做,数据库可以缓存在计算查询时所做的大量工作,因此您的数据库访问速度会更快。当您将参数混合到查询代码本身中时,这不起作用(或至少不起作用)。

关于sql - sql注入(inject)场景中格式化函数与参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11128171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com