0

我所有的页面都有一个关闭功能,可以向我发送一封包含页面参数的电子邮件。我用它来解决几个页面上的问题。但是一页不断崩溃,但没有显示任何调用参数。如果我调用没有参数的页面,它工作正常。我已尝试跟踪页面上的所有链接,它们不会导致任何错误。在写这篇文章时,我意识到该页面允许上传文件。也许有人正在上传一些导致页面崩溃的恶意文件。来电者在印度,airtelbroadband.in。但如果是这种情况,关闭函数会将文件传递到我的电子邮件中,因为它与 POST 传递到同一页面。

这是对我的关闭功能的调用

register_shutdown_function('shutdown', $_SERVER['REQUEST_URI'],file_get_contents("php://input"));
error_reporting(E_ERROR);

这是关机功能

    function shutdown($pagename,$post){
       $last_error = error_get_last();
       if($last_error['type'] === E_ERROR){
          mail ("mynames@gmail.com", "ERROR REPORT", "https:/mydomain.com$pagename post->$post<-","From: " . "ErrorReport@mydomain.com");
    }   
}

这是我收到的电子邮件的内容:

https://mydomain.com/gpx_waypoint_edit.php post-><-

没什么用。当此功能起作用时,我会在我的电子邮件中获得导致页面崩溃的参数,并且我能够修复它们。这是唯一崩溃的页面,我没有得到任何提示。

我提到这个页面可以上传文件。这是执行上传的代码。我应该把支票放在这里吗?

<form enctype='multipart/form-data' action="<?echo $PHP_SELF?>" method='post'>
   <input type='hidden' name='MAX_FILE_SIZE' value='100000' />
   <input name="toProcess" type="file"><br>
   Number of New Waypoints <input type="text" name="lines" size="5"><br>
   <input type='submit' value='Submit' />
</form>
<?
  if (is_uploaded_file($_FILES['toProcess']['tmp_name'])) $filename = $_FILES['toProcess']['tmp_name'];      
 else  $filename == "";
?>

最后一点。我不运行 SQL 数据库,所以我得到的所有注入攻击都无济于事。我刚刚给他们发了一条 403 消息,所以他们什么也做不了。

基本上我无法弄清楚为什么这个页面会崩溃。如果有人可以帮助我理解,我将不胜感激。

4

1 回答 1

1

您并没有真正了解代码中发生的事情的全貌,因为您的电子邮件不包含实际的异常消息,而且您也没有记录它。

您可以在电子邮件中包含如下错误:

$message .= "\n" . print_r( $last_error, true ); 

为了获得额外的稳健性,您应该配置 PHP 以将所有错误、警告和通知记录到服务器上的日志文件中,您可以在遇到问题时检查以寻找线索。有关如何设置的详细信息,请参阅本指南。

于 2021-05-05T18:17:34.117 回答