关于php:如何防止攻击?

How to prevent attacks?

本问题已经有最佳答案,请猛点这里访问。

我认为黑客(或脚本小子)使用网站代码库的漏洞攻击了我的网站。 数据库中的帖子已更改,以便它们包含此html:

1
<meta http-equiv="refresh" content="0;url=http://example.com"/>

但我现在无法改写系统。 有什么策略可以防止将来发生这种情况?

我正在考虑将管理脚本迁移到允许访问某些域的子域。 或者使用mod_security SecFilterScanPOST并扫描包含http-equiv等的所有发布请求。或者只允许来自我的服务器或所有这些请求的帖子请求?

谢谢。


第一步可能是调查注入代码的位置,这可以帮助您确定根条款是什么 -

  • 如果您的网站从数据库获取内容并且注入的标记作为数据库内容的一部分被检索,则您的网站可能存在SQL注入漏洞或其他漏洞,允许攻击者更改其中的内容。

  • 如果每个PHP文件中都有标记,则表示攻击者可以访问您的文件系统。他可以访问您的FTP或telnet或任何其他管理控制台,或者您的网站存在漏洞,允许攻击者在网站上修改/创建文件。

  • 您的服务器也可能存在允许攻击者进行此类访问的漏洞。

  • 确定根本原因后,相应地修复它=)

    以下是一些通用建议,以帮助防止再次发生同样的事情:

  • 通过代码审查,笔测试或一些自动扫描来检查您的网站和服务器是否存在漏洞,并相应地进行修复。

  • 及时安装更新,修补程序,安全补丁。保持更新,更新,更新,更新......

  • 在文件系统上分配适当的文件夹权限(读写,只读,无访问权限),并仅向用户授予必要的权限(min-privilege原则)。

    • 例如,您可以考虑使Web服务器用户只能读取除上载文件夹之外的所有Web内容文件夹。
    • 配置文件通常不需要Web服务器用户可写。通常它们只能由管理员写入。另外注意不要允许通过Web服务器访问此类文件的内容(即通过Web服务器的http:// url)。将它们直接置于Web内容根目录之外是个不错的主意
    • 将任何上传文件夹放在Web内容根目录之外也是一个不错的主意
    • 挖掘文件的所有者也是如此,因为所有者可以自由地更改文件的权限。
  • 使用第三方组件时要小心(例如Wordpress / Joomla插件)??。仅在您信任发布者时使用。仅从主站点下载。记得要让它们保持最新状态。如有必要,请禁用并删除它们

  • 限制对FTP,Telnet,数据库管理控制台(例如phpMyAdmin)等管理控制台和服务的访问。为它们分配好的密码。最好不要让任何人除了授权访问它(例如使用防火墙或配置中设置的IP限制,或隐藏在VPN后面)

    • 实际上,当传输密码(特别是管理员)时,你应该避免使用任何明文协议。通常有一些加密的替代品,例如Telnet - > SSH,FTP - > SFTP / FTP,HTTP / HTTPS。
    • 确实应该避免从Internet访问数据库端口。只有罕见的screnario你需要这个。在大多数情况下将其配置为侦听环回接口...

  • 在XSS和输入验证上查看OWASP。

    不要清理您的输入 - 您希望数据库中的原始 - 而是将其视为不受信任的数据,并在输出时转义/撤防。


    如果您不想在从db(您应该)读取数据时转义数据,这是一个懒惰的解决方案。

    1
    2
    3
    4
    5
    6
    7
    function escape_deep(&$value)
    {
     $value = htmlspecialchars($value);
    }

    array_walk_recursive($_GET, 'escape_deep');
    array_walk_recursive($_POST, 'escape_deep');