我认为黑客(或脚本小子)使用网站代码库的漏洞攻击了我的网站。数据库中的帖子已更改,因此它们包含此html:
<meta http-equiv="refresh" content="0;url=http://example.com"/>
但我现在无法重写系统。有什么策略可以防止将来发生这种情况?
我正在考虑将管理脚本迁移到允许访问某些域的子域。或者使用mod_security SecFilterScanPOST并扫描包含http-equiv等的所有发布请求。或者仅允许来自我的服务器或所有发布的请求?
谢谢。
答案 0 :(得分:3)
第一步可能是调查注入代码的位置,这可以帮助您确定根条款是什么 -
如果您的网站从数据库获取内容并且注入的标记是作为数据库内容的一部分检索的,那么您的网站可能存在SQL注入漏洞或其他漏洞,允许攻击者更改其中的内容。
< / LI>如果每个PHP文件中都有标记,则表示攻击者可以访问您的文件系统。他可以访问您的FTP或telnet或任何其他管理控制台,或者您的网站存在漏洞,允许攻击者在网站上修改/创建文件。
您的服务器也可能存在允许攻击者进行此类访问的漏洞。
确定根本原因后,相应地修复它=)
以下是一些有助于防止再次发生这种情况的通用建议:
通过代码审查,笔测试或一些自动扫描检查您的网站和服务器是否存在漏洞,并相应地进行修复。
及时安装更新,修补程序,安全补丁。保持更新,更新,更新,更新......
在文件系统上分配适当的文件夹权限(读写,只读,无访问权限),并仅向用户授予必要的权限(min-privilege principle)。
使用第三方组件时要小心(例如Wordpress / Joomla插件)。仅在您信任发布者时使用。仅从主站点下载。记得要让它们保持最新状态。如有必要,请禁用并删除它们
限制对FTP,Telnet,数据库管理控制台(例如phpMyAdmin)等管理控制台和服务的访问。为它们分配好的密码。最好是不要让任何人除了授权访问它(例如使用防火墙或配置中设置的IP限制,或隐藏在VPN后面)
答案 1 :(得分:2)
在XSS和input validation上查看OWASP。
不要清理您的输入 - 您希望数据库中存在原始<meta http-equiv="refresh" content="0;url=http://example.com"/>
- 而是将其视为不受信任的数据,并在输出时对其进行转义/撤防。
答案 2 :(得分:1)
如果您不想在从db(您应该)读取数据时转义数据,这是一个懒惰的解决方案。
function escape_deep(&$value)
{
$value = htmlspecialchars($value);
}
array_walk_recursive($_GET, 'escape_deep');
array_walk_recursive($_POST, 'escape_deep');