gpt4 book ai didi

sql - 参数化 SQL 语句与非常简单的方法

转载 作者:行者123 更新时间:2023-12-04 11:45:12 25 4
gpt4 key购买 nike

当我开始在我的程序中编写第一个 SQL 语句时,我对使用同事向我展示的一种非常简单的方法保护自己免受 SQL 注入(inject)感到很自在。它用两个单引号替换了所有单引号。

例如,有一个搜索字段,您可以在其中输入客户名称以在客户表中搜索。如果你要输入

Peter's Barbershop



SELECT 语句看起来像
SELECT *
FROM Customers
WHERE Customername = 'Peter''s Barbershop'

如果现在攻击者会插入这个:
';DROP TABLE FOO; --

该声明将如下所示:
SELECT *
FROM Customers
WHERE Customername = ''';DROP TABLE FOO;--'

它不会删除任何表,而是在 customertable 中搜索 customername ';DROP TABLE FOO;-- 我想不会找到 ;-)

现在在用这种方法编写语句并保护自己免受 SQL 注入(inject)之后,我读到许多开发人员使用参数化语句,但我从未读过使用“我们的”方法的文章。所以肯定有一个很好的理由。

参数化语句将涵盖哪些场景但我们的方法没有?与我们的方法相比,参数化语句的优势是什么?

谢谢
菲利普

最佳答案

参数化查询比对 sql 注入(inject)的防御具有更多的过程。

  • 它解决了日期和时间格式化和解析的问题。
  • 您可以为参数化查询准备执行计划。
  • sql注入(inject)保护。

  • 我现在不记得其他专业人士了:)。

    然而,“双引号”的方式对于字符长度有限的字段存在问题。

    例如:
  • 该页面有“昵称”框,可以是 10 个字符长。
  • 用户插入“不关心”——确切的 10 个字符。

  • 现在,如果将引号加倍,则该值有 11 个字符,并且数据库将“剪切”它,并且您在 db 中获得了另一个值而不是用户键入的值。

    所以我推荐参数。

    关于sql - 参数化 SQL 语句与非常简单的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2730853/

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