gpt4 book ai didi

php - 是否存在类似反向准备语句的东西?

转载 作者:太空宇宙 更新时间:2023-11-03 11:53:57 24 4
gpt4 key购买 nike

我骑了一些关于 sql 二阶注入(inject)的东西,据我所知,当你从数据库中检索数据时,它们就会发生,并且“var(行单元格数据)”包含一个将执行的 SQL 代码(?为什么要执行它?)。

我的问题是:为了防止这些攻击,有没有办法告诉 PDO 我正在查询的数据只是纯数据,没有要执行的 SQL 代码(比如当您使用准备好的语句绑定(bind)值时。 ..)?

最佳答案

二阶SQL注入(inject)不是数据库或PDO等的漏洞,存储在数据库中的SQL代码在你获取它时意外地被PDO或数据库执行。

二阶SQL注入(inject)漏洞与经典漏洞非常相似,但是是由于您的代码天真地处理或信任您已经存储在数据库中的数据,而不是天真地处理外部/用户提供的数据。

如果我尝试使用用户名 michael ' OR 1=1 -- 登录您的网站,而您天真地设计了一个易受 SQL 注入(inject)攻击的查询,我可能只能登录因为你的查询变成了...

SELECT * FROM user
WHERE username = 'michael' OR 1 = 1 --';

这部分你已经理解了。

因此,您正在使用准备好的语句并避免这种基本的编程缺陷。

但是,如果我能够创建这样的帐户,现在您的数据库中存储的数据可能不安全。但这并非不安全,因为 PDO 或服务器将允许它稍后自发执行。

如果您正确但天真地稍后在您的代码中假设我的帐户信息“来自数据库”而不是“来自外部来源”并且您懒惰地构建查询,这是不安全的...

... "WHERE username = '" + $stored_username + "';" ...

...这是一个二阶 SQL 注入(inject)漏洞。例如,我可以通过登录我的帐户并更改我的密码来欺骗您的代码,将所有用户的密码设置为一个密码。

如果您始终使用准备好的语句并且您的代码不会天真地处理来自数据库的数据,就好像它在某种程度上“已经安全”一样,那么可以避免二阶漏洞。

这不是根本不同的情况,它只是“稍后”在您的代码中发生。

关于php - 是否存在类似反向准备语句的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34144787/

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