gpt4 book ai didi

sql - 防止 sql 注入(inject) - 如果使用准备好的语句,为什么要转义输入?

转载 作者:行者123 更新时间:2023-12-04 13:28:40 26 4
gpt4 key购买 nike

我正在做一些网络安全方面的研究,我的文章的修订者说:

“应该清楚的是,为了避免 SQL 注入(inject),应用程序应该使用准备好的语句、存储过程和转义输入”

我的问题是:这些方法之一还不够吗?好的,准备好的语句或存储过程比简单的转义要好,但是如果我使用 PDO,为什么我应该转义输入或有一个存储过程?这有意义吗?

最佳答案

我会将修订者的措辞更改为:

It should be clear that to avoid SQL Injection, the application should use prepared statements, escape input, or filter application data before interpolating into an SQL string.



如果您要作为参数传递,则无需转义值。事实上,您不应该这样做,因为您会在数据中插入文字反斜杠。

当您不能使用查询参数时,您需要在 SQL 语句中插入字符串。示例包括:
  • 表名和列名,有其own syntax for delimited identifiers .这些必须是准备时 SQL 查询的一部分,以便 RDBMS 可以解析和验证它们。
  • SQL 关键字,应该清理但不能转义,因为它们没有分隔。
  • 其他语法或表达式。
  • 某些情况下必须在准备时提供文字值,例如MySQL 的全文函数不支持搜索模式的参数。

  • 存储过程不能防御 SQL 注入(inject)。您可以在存储过程中准备和执行不安全的动态 SQL 语句。见 http://thedailywtf.com/Articles/For-the-Ease-of-Maintenance.aspx一个很棒的故事。

    我在我的演示文稿中涵盖了所有这些案例 SQL Injection Myths and Fallacies .这对您来说可能是一个有用的资源。

    我还在我书中的一章中介绍了 SQL 注入(inject)防御, SQL Antipatterns: Avoiding the Pitfalls of Database Programming .

    关于sql - 防止 sql 注入(inject) - 如果使用准备好的语句,为什么要转义输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8715104/

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