如果 sql 语句被保存到 table,那么它是否应该被视为 sql 注入?
If sql statement is saved to table, then should it treat as sql injection?
据我所知sql注入定义是:
SQL 注入是一种应用层攻击技术,黑客使用这种技术通过针对基于 Web 的应用程序从组织中窃取数据
如果一个 SQL 语句可以通过表单提交保存,那么它是否应该被视为 SQL 注入,直到无法操作任何数据?
假设我有一个包含文本区域输入的联系表单。有人输入值:
SELECT * FROM users
我的应用程序允许保存此类数据。这是否被视为 SQL 注入?
我不知道您从哪里得到 SQL 注入的定义,但它只是部分准确。
Wikipedia's定义更准确:
SQL injection is a code injection technique, used to attack data-driven applications, in which nefarious SQL statements are inserted into an entry field for execution (...)
了解 SQL 注入的关键部分是它的实际工作原理。一位名叫 "Your Common Sense" 的用户对此写了一个很好、简单的解释 right here.
简而言之,SQL 注入是将 "injecting" SQL 代码注入未受保护的 SQL 语句的行为 - 从而允许攻击者找到有关数据库的详细信息,有时甚至达到攻击者可以控制整个数据服务器的程度。
在数据库中保持完整的 SQL 语句可能是通向所谓 "Second order SQL injection" 的大门(维基百科,同一页:)
Second order SQL injection occurs when submitted values contain malicious commands that are stored rather than executed immediately.
因此,您问题的直接答案是:视情况而定。这 可能是 真正的 SQL 注入威胁。
你看,为了成功执行二阶 SQL 注入,仅在数据库中存储 SQL 语句是不够的 - 您的应用程序还必须执行它们(因为攻击者不可以直接访问你的数据库。如果他们这样做了,他们就不需要再乱搞 SQL 注入了)。
SQL 注入风险可以通过使用参数化查询完全消除。
二阶 SQL 注入风险仅在您的应用程序旨在存储完整的 SQL 语句然后 运行 它们时才相关。
如果您的应用程序旨在这样做,那么您必须通过不允许用户编写 free-text sql 来保护自己,而是为他们提供一个接口来安全地执行此操作,而后端将生成他们的参数化查询。
据我所知sql注入定义是:
SQL 注入是一种应用层攻击技术,黑客使用这种技术通过针对基于 Web 的应用程序从组织中窃取数据
如果一个 SQL 语句可以通过表单提交保存,那么它是否应该被视为 SQL 注入,直到无法操作任何数据?
假设我有一个包含文本区域输入的联系表单。有人输入值:
SELECT * FROM users
我的应用程序允许保存此类数据。这是否被视为 SQL 注入?
我不知道您从哪里得到 SQL 注入的定义,但它只是部分准确。
Wikipedia's定义更准确:
SQL injection is a code injection technique, used to attack data-driven applications, in which nefarious SQL statements are inserted into an entry field for execution (...)
了解 SQL 注入的关键部分是它的实际工作原理。一位名叫 "Your Common Sense" 的用户对此写了一个很好、简单的解释 right here.
简而言之,SQL 注入是将 "injecting" SQL 代码注入未受保护的 SQL 语句的行为 - 从而允许攻击者找到有关数据库的详细信息,有时甚至达到攻击者可以控制整个数据服务器的程度。
在数据库中保持完整的 SQL 语句可能是通向所谓 "Second order SQL injection" 的大门(维基百科,同一页:)
Second order SQL injection occurs when submitted values contain malicious commands that are stored rather than executed immediately.
因此,您问题的直接答案是:视情况而定。这 可能是 真正的 SQL 注入威胁。
你看,为了成功执行二阶 SQL 注入,仅在数据库中存储 SQL 语句是不够的 - 您的应用程序还必须执行它们(因为攻击者不可以直接访问你的数据库。如果他们这样做了,他们就不需要再乱搞 SQL 注入了)。
SQL 注入风险可以通过使用参数化查询完全消除。
二阶 SQL 注入风险仅在您的应用程序旨在存储完整的 SQL 语句然后 运行 它们时才相关。
如果您的应用程序旨在这样做,那么您必须通过不允许用户编写 free-text sql 来保护自己,而是为他们提供一个接口来安全地执行此操作,而后端将生成他们的参数化查询。