【问题标题】:Can hostname inject SQL? [duplicate]主机名可以注入 SQL 吗? [复制]
【发布时间】:2019-06-13 04:14:32
【问题描述】:

这是 PHP 中客户端主机名的超全局:

$_SERVER['REMOTE_HOST']

它通常看起来像:

ecIP-AD-DRE-SS.us-west-1.compute.amazonaws.com
IP-AD-DRE-SS.bb.dnainternet.fi
IP-AD-DRE-SS.dynamic.lounea.fi

有人可以更改他们的主机名,使其包含能够进行 SQL 注入的内容吗? 此外,如果您只从用户输入中删除单引号 ',是否可以防止 SQL 注入?

【问题讨论】:

  • 既然您应该执行上述操作(参数化准备好的语句),主机名是否可以包含 SQL 并不重要。永远不要相信您无法 100% 控制的数据。即使这样,您也应该小心(因为您可能会不小心输入可能会破坏查询的错误字符)。
  • 我认为改变 _SERVER 值的唯一方法是操作 php 二进制文件或配置。因此,如果服务器是可信任的,则没有问题。当然有人可以操纵反向 DNS 名称解析,但这种操纵水平值得注入 (rofl) 的奖励。
  • @WalkerLeite - $_SERVER-array 包含许多来自客户端的值,因此即使您的服务器是受信任的,也并不意味着所有这些值都可以。

标签: php mysql sql sql-injection code-injection


【解决方案1】:

有人可以更改他们的主机名,使其包含能够进行 SQL 注入的内容吗?

有趣的问题。可能是?不过没关系,因为……

此外,如果您只从用户输入中删除单引号 ',是否可以防止 SQL 注入?

绝对不是。忘记处理引号并将prepared statementsbound parameters一起使用。

编辑:另外请注意,您通常不希望您的网络服务器对每次点击进行 DNS 查找,因此通常应该取消设置 $_SERVER['REMOTE_HOST']。如果您需要偶尔查找身份验证或日志记录,您可以在 PHP 中临时进行。

【讨论】:

  • 无法保证主机名不包含恶意内容,甚至 SQL 注入。一些 DNS 解析器并不关心它们在结果中包含什么。他们只是通过它。
猜你喜欢
  • 2020-02-16
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 2015-03-27
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 2013-02-25
相关资源
最近更新 更多