2024年波兰PHPC

错误报告

对于PHP安全性,错误报告有两个方面。一个是有利于提高安全性,另一方面则是有害的。

标准的攻击策略包括通过馈送来分析系统它不正确的数据,并检查返回的错误。这允许系统破坏者探测有关服务器的信息,以确定可能的弱点。例如,如果攻击者收集了有关页面的信息根据之前提交的表格,他们可能会尝试覆盖变量,或修改它们:

示例#1使用自定义HTML页面攻击变量

<form method=“post”action=“attacktarget?username=badfoo&amp;password=badfo”><input type=“hidden”name=“username”value=“badfoo”/><input type=“hidden”name=“password”value=“badfoo”/></form>

通常返回的PHP错误对试图调试脚本的开发人员,指示此类情况作为失败的函数或文件,它失败的PHP文件,以及故障发生的行号。这就是全部可以利用的信息。这对于php来说并不罕见要使用的开发人员show_source(),突出显示字符串(),或突出显示文件()作为调试措施,但在一个活动站点,这可能会暴露隐藏的变量、未检查的语法、,和其他危险信息。特别危险的是跑步来自具有内置调试处理程序的已知源的代码,或使用常见调试技术。如果攻击者能够确定你使用的一般技术,他们可能会尝试强行创建页面,通过发送各种常用调试字符串:

示例#2利用常见调试变量

<form method=“post”action=“attacktarget?errors=Y&showerrors=1&debug=1”><input type=“hidden”name=“errors”value=“Y”/><input type=“hidden”name=“showerrors”value=“1”/><input type=“hidden”name=“debug”value=“1”/></form>

无论采用何种错误处理方法,探测系统错误导致向攻击者提供更多信息。

例如,普通PHP错误的风格表明系统正在运行PHP。如果攻击者正在查看.html页面,并且希望探测后端(以查找系统),通过向其输入错误的数据,他们可能能够确定系统是用PHP构建的。

功能错误可以指示系统是否正在运行特定的数据库引擎,或提供有关网页或编程或设计的。这样可以对打开数据库端口,或查找特定的错误或弱点在网页中。例如,通过输入不同的错误数据,攻击者可以确定脚本中的身份验证顺序,(根据行号错误)以及探测可能在脚本中的不同位置被利用。

文件系统或一般PHP错误可以指示哪些权限web服务器具有,以及web服务器上的文件。开发人员编写的错误代码可能会加剧这个问题,导致容易利用以前的“隐藏”信息。

这个问题有三个主要解决方案。第一个是仔细检查所有功能,并尝试对其进行补偿共个错误。第二是完全禁用错误报告在运行代码上。第三是使用PHP的自定义错误处理函数以创建自己的错误处理程序。依靠在您的安全策略中,您可能会发现这三项都适用你的情况。

提前发现这个问题的一种方法是利用PHP自己的错误_报告(),以帮助您保护代码安全,并找出可能危险的变量用法。通过在部署之前测试代码全部(_ALL),您可以快速找到变量可能会中毒的区域或以其他方式修改。一旦准备好部署,您应该通过设置以下选项完全禁用错误报告错误_报告()设置为0,或关闭错误使用显示php.ini文件选项显示_错误,将代码与探测隔离开来。如果选择后者,还应该使用错误日志ini指令和turn日志错误(_E)上的。

示例#3使用E_ALL查找危险变量

<?php(电话)
如果($用户名) {//使用前未初始化或检查
$good_login(良好登录)=1;
}
如果(
$good_login(良好登录)==1) {//如果上述测试失败,则在使用前未初始化或检查
读取文件(“/heigh/sensitive/data/index.html”);
}
?>

添加注释

用户贡献的笔记1条注释

earlz--无垃圾邮件--在earlz dot biz dot tm
15年前
对于使用OpenBSD和PHP的用户,请注意。默认php.ini的display_errors=off。这与PHP默认的display_errors=on相反。如果您在OpenBSD上看到错误时遇到问题,请确保编辑php.ini使display_errors=on。(我在OpenBSD4.4上遇到了这个问题)
到顶部