【问题标题】:PHP MySQL security, Do i really need it? [closed]PHP MySQL 安全性,我真的需要它吗? [关闭]
【发布时间】:2013-01-18 00:18:05
【问题描述】:

所以我一直想知道,在 previous question 建议使用 PDO 准备语句之后,为什么在连接到我的数据库以在这样的实例中使用它们时很重要?

例如使用$_SERVER['REMOTE_ADDR']

我的意思是,如果没有人知道我正在使用数据库,并且他们不知道我在寻找什么,而我在数据库中寻找的东西(假设他们知道)是一个 IP 地址,为什么要重要?这是 XSS 攻击的问题吗?

真正的问题。在这种情况下,永远无法找到使用 PDO 语句(或类似方法)的任何理由。我确定不是很脆弱吗?

【问题讨论】:

  • 这不是关于 XSS,而是关于 SQL 注入。您不需要知道应用程序是否使用数据库(大多数情况下)来尝试 SQL 注入攻击;如果它有效,它确实有效。你要找什么也没关系。
  • @RobertHarvey 你是对的。但是,当他在选择中使用$_SERVER['REMOTE_ADDR'] 的值时,怎么可能有人注入一些随机的 SQL 代码?
  • @cheesemacfly:通过在某些输入的末尾放置一个分号。如果根本没有用户输入,就没有注入的可能性。但是,当最佳实践是使用 PDO 准备好的语句时,为什么还要冒险呢?
  • 呃,如果你使用准备好的语句,你就不必进行这个讨论了。

标签: php mysql security


【解决方案1】:

所以你根本没有清理你的输入?真的吗?

当您有一个名为“Bob O'Reilly”的用户时会发生什么?你的代码能应付吗?你试过了吗?

或者如果有人在数字字段中输入字母会发生什么。你的代码能应付吗?

SQL 数据清理不仅仅是防止黑客入侵;它允许输入日常数据,而不必担心它是否包含引号或其他会破坏查询的字符。

防止黑客入侵是一件非常好的事情,但即使这不是考虑因素,您仍然需要清理您的数据库输入。

...如果没有人知道我在使用数据库...

黑客并不“知道”,他们猜测;他们尝试了一些常见的黑客技术,看看会发生什么。如果该站点以他们希望的方式做出响应,那么他们就知道它很脆弱。那是他们真正开始攻击你的时候。

这些调查黑客通常是自动化的,只是在网络上搜寻要攻击的网站;只要上网,您就会很容易受到攻击。不要仅仅因为你默默无闻,或者因为没有人知道你的代码,或者因为没有人想破解你,就认为你是安全的。他们会找到你并入侵你。

【讨论】:

  • 非常有帮助,谢谢。也许我的粗心需要解决。除了 IP 地址,我从未提及获取任何其他信息,但它仍然非常有用
  • 我真的被结束语感动了:) +1
【解决方案2】:

当您从 GET 或 POST 请求或从 Cookie 中获取值并使用该值来构建将要查询的字符串时,接收到的数据可能已被恶意用户正确设置以转换您的将原始查询转换为不同的查询(使用不同的 SQL 语句)并控制您的数据。

这里就不一一解释了,Google for SQL injection

当您使用“准备好的语句”时,几乎不可能使用传递的数据来更改查询语句。

编辑

例如使用 $_SERVER['REMOTE_ADDR']

如果唯一的值是那个值,那么你就很安全了。但是,谁知道呢……

也许将来会发现的 PHP 中的错误将允许客户端更改该值以调整您的查询...

有疑问,请坚持 prepared statements 模式。这对您有什么影响?

【讨论】:

    【解决方案3】:

    使用准备好的语句,即使它可能不是绝对必要的,也可以让您保持默认生成安全代码的心态,并避免您认为输入安全但实际上并不安全的情况(例如,$_SERVER['HTTP_HOST'] 似乎安全,但不一定)。是的,具体的变量$_SERVER['REMOTE_ADDR']应该是安全的,但如果格外小心,什么都不会丢失。

    【讨论】:

      【解决方案4】:

      在你的 sql 语句中使用了你的 php vars?对于 where / order / limit 子句?如果是,则使用带有转义变量的 PDO 语句。

      如果将来您迁移到 SQLServer、SQLite……您只需要用 PDO 更改驱动程序连接器(1 个代码行)。使用 mysql/mysqli,您必须更改所有 php 代码。

      【讨论】:

        【解决方案5】:

        PDO 有助于阻止攻击者提供的任意 SQL(SQL 注入)的执行。

        如果攻击者可以在您的服务器上执行他们喜欢的任何 SQL,那么他们可以从数据库中检索/编辑数据,此外,在某些 DBMS 中,他们将能够根据所采取的安全措施访问/创建可能在您的 webroot 中的文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-19
          • 2019-10-29
          • 1970-01-01
          • 2011-11-23
          • 1970-01-01
          • 2022-11-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多