我知道保护任何网站都是一个非常艰难和广泛的话题,但我想将这个问题与我一直在研究的特定网站联系起来。它是在 2004 年左右由其他程序员用 php 编写的,我负责它的管理。我的问题是它一次又一次地被黑客入侵。我注意到当它被黑客入侵时,以下事情。
-
.htaccess
文件已被修改 - 修改了
index.php
和config.php
文件 - 管理员密码已更改
- 在服务器中上传文件
- 更改文件和文件夹的文件权限
我已经处理了代码,它已被正确转义,我认为没有SQL注入的可能性。由于大多数问题都与文件和权限有关,我对服务器安全性有疑问,但由于它是在 2004 年左右编码的原因,它肯定会缺乏一些安全性,所以我还需要在我的代码中处理哪些其他事情来防止我的网站因上述问题而被黑客入侵?
提前谢谢。
由于文件已被修改,由于SQL注入错误,这不太可能。
访问文件的可能性:
- 猜测/窃取您的FTP密码
- 入侵服务器(你真的无能为力)
- 服务器上的隔离不足,这意味着其他客户可以更改您的文件(您对此也无能为力)
- 远程代码执行错误
现在,既然您说该网站来自 2004 年,那么它可能使用 eval
进行模板或include
用于 site.php?section=foo
之类的东西,然后将foo.php
包含在代码中的某个地方,这两者都在 2004 年经常完成。所以我会对 eval 和正则表达式include(.*'$.*)
以及require(.*'$.*)
进行快速文件搜索。这些是主要嫌疑人,取决于它们的使用方式。
有人可能可以直接访问服务器,而不是(a)特定的脚本。这听起来不像是源于代码库的安全问题。
如果这种情况一次又一次地发生,您可能需要考虑将整个站点移动到另一个提供商。从其他地方重新开始,使用新密码、访问控制等。
OWASP前10名非常好读。我的一些猜测。
- 具有漏洞的过时操作系统。
- MySQL注入,也许所有密码都以纯文本形式存储,这非常非常糟糕。对于身份验证,您应该改用类似 openID 的东西。此外,当你有MySQL注入时,你应该尽可能更新代码以使用PDO(预准备语句)。
- 读/写权限设置不正确或 APACHE/PHP 在提升级别运行?
我给你的建议是:
- 阅读有关OWASP的信息。然后清晰地查找代码中的缺陷。每条线都可能是源头问题。也许你应该放弃旧代码,因为非常不安全?
- 重新安装您的操作系统,因为您甚至可以拥有 rootkit?
- 切勿仅使用共享主机,至少使用托管服务器/使系统保持最新
- 检查你的php.ini是否存在安全问题(你可以谷歌)
- 检查您的 Apache/Nginx/...覆盖的配置
- 切勿与服务器进行未加密的通信(使用 SFTP、SSH 等)
- 永远不要相信外部值(也来自 Cookie),始终转义/投射这些值
- 过滤用户输入(删除换行符、0x00字符、标记...不需要的地方)
- 检查服务器/数据库/...
- 检查所有服务是否都以正确的用户身份运行
- 检查 Web 文件夹中的文件(写入/执行)权限
- 转义您在网站上显示的所有内容,甚至不要以任何方式相信您的数据库数据是安全的
- 如果您使用第三方软件,请注意安全建议
- 重新安装服务器,您可能已经植根
- 使用预准备语句
就是这样;这将大大增强您的安全性,但经验丰富的攻击者很难。