【问题标题】:Understanding the basics on PHP and MySQL security [closed]了解 PHP 和 MySQL 安全性的基础知识 [关闭]
【发布时间】:2014-07-15 22:58:43
【问题描述】:

我一直避免学习 PHP 和 MySQL,因为我在互联网上读到有关 PHP 不是一种安全语言以及数据库存在安全风险(SQL 注入等)的信息。

我想了解的主要内容是通常由糟糕的 PHP/MySQL 代码造成的损坏类型。换句话说,当我们编写糟糕的代码时,数据库中的信息或整个服务器中的信息有什么风险?

我知道这可能是一个复杂的话题,但我只想简要说明当数据库或 PHP 脚本遭到破坏时通常会影响哪些信息。

  1. 当数据库受到威胁时,这是否意味着整个服务器都可能处于危险之中,或者只是数据库及其内容受到威胁?

  2. 当 PHP 脚本受到威胁时,这是否意味着整个服务器都可能处于危险之中,或者只是脚本和任何相关内容都处于危险之中?

  3. 在创建数据库时最重要的是要保持安全,即与数据库的连接?

很抱歉这些基本问题,但我需要在继续之前了解这一点。

【问题讨论】:

  • 这太宽泛了。然而,为了解决您的问题,PHP 并不比任何其他语言更不安全。如果滥用,所有语言都是不安全的。而当你编写糟糕的代码时,整个服务器可能会面临风险,或者可能只是数据库,这取决于问题的性质。假设一切都处于危险之中。您应该花一些时间阅读OWASP website
  • 我认为 PHP 以不安全着称,因为一段时间以来,它不支持准备好的语句(尽管这也已经修复了很长时间)。尽管如此,我还是看到很多人编写的代码没有使用它们,而且他们的代码非常容易受到攻击。
  • 安全与编程语言无关。重要的是您编写的代码以及其他一些内容。
  • 当一个 PHP 脚本被入侵时,这是否意味着整个服务器都可能处于危险之中 - 通常,如果一个 PHP 脚本被入侵,它会授予远程攻击者能够以 Web 服务器用户身份运行 PHP。这意味着他们也可以像该用户一样读取、写入和删除文件。数据库内容可能被盗,并安装垃圾邮件中继,具体取决于攻击者和原因。大多数自动攻击都是为了安装僵尸网络或垃圾邮件中继。

标签: php mysql sql database security


【解决方案1】:

关于 SQL 注入...当数据直接连接到命令中时,数据可能会被混淆为命令。几乎任何事情都是如此,但我们经常以对 Web 应用程序的 SQL 注入攻击的形式看到它。例如:

$evil_user_input = '0; DELETE FROM someTable WHERE 1=1';
mysql_query('SELECT * FROM someOtherTable WHERE fieldA = ' . $evil_user_input);

在实践中,您一次只能运行一个查询,因此您必须变得狡猾,但这里的重点是,如果不转义以在 SQL 中使用,应该是什么数据可能是模棱两可的。这超出了安全性。假设您有一个用户键入引号的字段。现在你已经破坏了 SQL 并且你的代码崩溃了。

1- 当数据库受到威胁时,这是否意味着整个服务器可能处于危险之中,或者只是数据库及其内容受到威胁?

2- 当 PHP 脚本受到威胁时,这是否意味着整个服务器都可能处于危险之中,或者只是脚本和任何相关的内容都处于危险之中?

现在,当数据库遭到破坏或您的脚本遭到破坏时,无法一概而论地确定问题所在。这一切都取决于攻击是什么。你不能肯定地说任何东西都是真正孤立的,因为许多攻击依赖于许多部分。当事情发生时,你需要使用你的日志和其他证据来弄清楚发生了什么,然后修复它。

3- 创建数据库时最重要的是要确保安全,即与数据库的连接?

正确使用准备好的/参数化的语句,您不必担心 SQL 注入攻击。与数据库服务器本身的连接应通过安全隧道进行。大多数数据库线路协议本身并不安全……它们是为速度而构建的。如果您通过 localhost 访问数据,则不需要隧道。

【讨论】:

  • 在此和@halfer 的评论之间回答了我的问题。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 1970-01-01
  • 1970-01-01
  • 2011-08-11
  • 2021-04-07
相关资源
最近更新 更多