Php 如何预防<;meta http equiv=";刷新“&燃气轮机;攻击?
我认为黑客(或脚本小子)利用网站代码库的漏洞攻击了我的网站。数据库中的帖子已更改,因此它们包含以下html:Php 如何预防<;meta http equiv=";刷新“&燃气轮机;攻击?,php,apache,security,Php,Apache,Security,我认为黑客(或脚本小子)利用网站代码库的漏洞攻击了我的网站。数据库中的帖子已更改,因此它们包含以下html: <meta http-equiv="refresh" content="0;url=http://example.com"/> 但我现在不能重写系统。防止这种情况在未来发生的策略是什么 我正在考虑将管理脚本迁移到允许访问特定域的子域。或者使用mod_security SecFilterScanPOST并扫描所有包含http equiv等的post请求,或者只允许来自我的
<meta http-equiv="refresh" content="0;url=http://example.com"/>
但我现在不能重写系统。防止这种情况在未来发生的策略是什么
我正在考虑将管理脚本迁移到允许访问特定域的子域。或者使用mod_security SecFilterScanPOST并扫描所有包含http equiv等的post请求,或者只允许来自我的服务器或所有服务器的post请求
谢谢。如果您不想在从数据库读取数据时转义数据(您应该这样做),那么这是一个懒惰的解决方案 请参阅和上的OWASP
不要清理您的输入—您希望原始的
在数据库中—而是将其视为不受信任的数据,并在输出时对其进行转义/解除锁定。第一步可能是调查代码注入的位置,这可能有助于您确定根子句是什么-
-
例如,您可以考虑使Web服务器用户仅对所有Web内容文件夹(除了上传文件夹)可读。<李>
- 配置文件通常不要求web服务器用户可写。通常,它们只能由管理员写入。还要注意,不要允许通过web服务器(即通过web服务器的http://url)访问此类文件的内容。将它们直接放在web内容根目录之外是一个好主意
- 将任何上传文件夹放在web内容根目录之外也是一个好主意
- 挖掘文件的所有者,因为所有者可以自由更改文件的权限
- 实际上,在传输密码(尤其是管理员密码)时,应该避免使用任何明文协议。通常有加密的替代方案,例如Telnet->SSH、FTP->SFTP/FTP、HTTP/HTTPS
- 数据库端口确实应该避免从Internet访问。只有极少数的斯克雷纳里奥你会需要这个。在大多数情况下,将其配置为在环回接口上侦听
最好的解决方案是清理数据。此外,您可能还需要进一步调查,以防他们破坏服务器本身,这将是一个问题,而不是试图阻止他们已经做了什么。如果你的核心应用程序有安全漏洞,你需要通过修复这些漏洞来保护它。不是在外面贴绷带。@deceze虽然如此,但在现实中并不总是这样world@Sprague这听起来真像是一个真实世界的借口。@Jack,别天真了。询问者已经声明重写不是一个选项。我还说,我同意德克塞的逻辑的优点。。。但他的评论并没有转向回答这个问题,而是试图避免提问。不要对你的意见进行净化。。。等等,什么?@jack:是的:@FrancoisBourgeor谢谢..将HTML插入数据库与SQL注入有什么关系?您也可以通过完美保存准备好的语句来完成此操作…@circle感谢您提供了这一长而有用的答案。我会保留它,并把它给我未来的孩子:)我认为安全是一个清单问题。像飞行员一样,你应该检查所有东西而不依赖人类记忆…@FrancoisBullenger Yes prepared语句是SQL注入的有效措施。如果数据库参与生成页面内容,那么SQL注入并不是将HTML内容插入页面的唯一方法,这是正确的。也可以使用存储的XSS或类似工具来实现这一点。我在这里命名SQLi是因为蠕虫在许多CMS(例如Joomla)中利用已知SQLi插入恶意页面标题是非常常见的。我一次做了不同的事情,所以我在从db读取数据时逃逸了:)谢谢你的回答。。
function escape_deep(&$value)
{
$value = htmlspecialchars($value);
}
array_walk_recursive($_GET, 'escape_deep');
array_walk_recursive($_POST, 'escape_deep');