为什么我使用 PHP 的 $_SERVER 变量得到一个随机字符串作为 IP 地址?
Why am I getting a random string as IP address with PHP's $_SERVER variable?
我正在使用 php 记录网站访问者的 IP 地址以及一些其他信息($content),以便计算访问者的数量。
我正在使用以下代码:
<?php
public static function logContent(array $content = null){
try {
$myFile = fopen("visitors.txt", "a");
$txt = "IP: ";
if (isset($_SERVER['HTTP_CLIENT_IP']))
$ipAddress = $_SERVER['HTTP_CLIENT_IP'];
else if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$ipAddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
else if (isset($_SERVER['HTTP_X_FORWARDED']))
$ipAddress = $_SERVER['HTTP_X_FORWARDED'];
else if (isset($_SERVER['HTTP_FORWARDED_FOR']))
$ipAddress = $_SERVER['HTTP_FORWARDED_FOR'];
else if (isset($_SERVER['HTTP_FORWARDED']))
$ipAddress = $_SERVER['HTTP_FORWARDED'];
else if (isset($_SERVER['REMOTE_ADDR']))
$ipAddress = $_SERVER['REMOTE_ADDR'];
else
$ipAddress = 'UNKNOWN';
$txt .= $ipAddress;
$txt .= " Time: " . date("Y-m-d h:i:s", time());
$txt .= "\n";
if (!empty($content) && is_array($content)) {
foreach ($content as $k => $v) {
$txt .= "$k : ";
$txt .= $v;
$txt .= "\n";
}
$txt .= "\n";
}
fwrite($myFile, $txt);
fclose($myFile);
} catch (\Exception $e) {
}
}
?>
这段代码工作正常。通常,我有如下条目:
IP: 36.80.227.XX Time: 2020-06-19 08:23:52
IP: 191.252.61.XX Time: 2020-06-19 11:25:02
IP: 191.252.61.XX Time: 2020-06-19 11:25:02
但是,我最近在我的日志中收到了以下条目。
IP:
}__test|O:21:"JDatabaseDriverMysqli":3:{s:2:"fc";O:17:"JSimplepieFactory":0:{}s:21:"[=13=][=13=][=13=]disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:8:"feed_url";s:56:"die(md5(DIRECTORY_SEPARATOR));JFactory::getConfig();exit";s:19:"cache_name_function";s:6:"assert";s:5:"cache";b:1;s:11:"cache_class";O:20:"JDatabaseDriverMysql":0:{}}i:1;s:4:"init";}}s:13:"[=13=][=13=][=13=]connection";b:1;}����
Time: 2020-06-19 11:27:37
这是否是某种类似于 MySQL 用于 Java 的注入的恶意注入攻击?
我是否需要找出可疑之处并修补我的 Apache 服务器以提高安全性?
据我所知,HTTP_X_FORWARDED_FOR headers 是由 client/proxy (wiki) 发送的,您不会对 $_SERVER 的内容进行任何控制['HTTP_X_FORWARDED_FOR'].
所以是的,有人尝试过 SQL 注入,但在这种情况下,它不敏感(只是输出到文本文件)。
您必须在输出到文件之前检查 $ipAddress 的内容(例如使用正则表达式或使用 this)。
编辑: 您可以重现此行为:
curl -H 'X-Forwarded-For: 1.1.1.1' https://www.example.com/mypage
curl -H 'X-Forwarded-For: <SOME RANDOM INPUT>' https://www.example.com/mypage
希望对您有所帮助
这闻起来像是可能的注入攻击。您可能需要参考 this 进行更深入的了解。虽然这是关于 joomla 设置并且属于 2015 年,但签名值得一看。
我可能会建议查看任何可疑的日志 activity。
我正在使用 php 记录网站访问者的 IP 地址以及一些其他信息($content),以便计算访问者的数量。
我正在使用以下代码:
<?php
public static function logContent(array $content = null){
try {
$myFile = fopen("visitors.txt", "a");
$txt = "IP: ";
if (isset($_SERVER['HTTP_CLIENT_IP']))
$ipAddress = $_SERVER['HTTP_CLIENT_IP'];
else if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$ipAddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
else if (isset($_SERVER['HTTP_X_FORWARDED']))
$ipAddress = $_SERVER['HTTP_X_FORWARDED'];
else if (isset($_SERVER['HTTP_FORWARDED_FOR']))
$ipAddress = $_SERVER['HTTP_FORWARDED_FOR'];
else if (isset($_SERVER['HTTP_FORWARDED']))
$ipAddress = $_SERVER['HTTP_FORWARDED'];
else if (isset($_SERVER['REMOTE_ADDR']))
$ipAddress = $_SERVER['REMOTE_ADDR'];
else
$ipAddress = 'UNKNOWN';
$txt .= $ipAddress;
$txt .= " Time: " . date("Y-m-d h:i:s", time());
$txt .= "\n";
if (!empty($content) && is_array($content)) {
foreach ($content as $k => $v) {
$txt .= "$k : ";
$txt .= $v;
$txt .= "\n";
}
$txt .= "\n";
}
fwrite($myFile, $txt);
fclose($myFile);
} catch (\Exception $e) {
}
}
?>
这段代码工作正常。通常,我有如下条目:
IP: 36.80.227.XX Time: 2020-06-19 08:23:52
IP: 191.252.61.XX Time: 2020-06-19 11:25:02
IP: 191.252.61.XX Time: 2020-06-19 11:25:02
但是,我最近在我的日志中收到了以下条目。
IP: }__test|O:21:"JDatabaseDriverMysqli":3:{s:2:"fc";O:17:"JSimplepieFactory":0:{}s:21:"[=13=][=13=][=13=]disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:8:"feed_url";s:56:"die(md5(DIRECTORY_SEPARATOR));JFactory::getConfig();exit";s:19:"cache_name_function";s:6:"assert";s:5:"cache";b:1;s:11:"cache_class";O:20:"JDatabaseDriverMysql":0:{}}i:1;s:4:"init";}}s:13:"[=13=][=13=][=13=]connection";b:1;}���� Time: 2020-06-19 11:27:37
这是否是某种类似于 MySQL 用于 Java 的注入的恶意注入攻击?
我是否需要找出可疑之处并修补我的 Apache 服务器以提高安全性?
据我所知,HTTP_X_FORWARDED_FOR headers 是由 client/proxy (wiki) 发送的,您不会对 $_SERVER 的内容进行任何控制['HTTP_X_FORWARDED_FOR'].
所以是的,有人尝试过 SQL 注入,但在这种情况下,它不敏感(只是输出到文本文件)。 您必须在输出到文件之前检查 $ipAddress 的内容(例如使用正则表达式或使用 this)。
编辑: 您可以重现此行为:
curl -H 'X-Forwarded-For: 1.1.1.1' https://www.example.com/mypage
curl -H 'X-Forwarded-For: <SOME RANDOM INPUT>' https://www.example.com/mypage
希望对您有所帮助
这闻起来像是可能的注入攻击。您可能需要参考 this 进行更深入的了解。虽然这是关于 joomla 设置并且属于 2015 年,但签名值得一看。
我可能会建议查看任何可疑的日志 activity。