Hi,
My first topic here on the forum, hopefully an easy fix but I’m stuck since several days and repeated attempts…
The below PHP does what I want, need additional security such as protection from sql injection etc of course but my current challenge is the output. It gives me expected output from server1, double from server2, tripple from server3…
What am I missing, whats casuing this behavior?
<?php
$allowedReferer = 'http://SERVERXYZ.example.com/dnstest.html';
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
if ($referer !== $allowedReferer) {
exit('Access denied.');
}
$hostname = $_GET['hostname'];
$region = $_GET['region'];
$queryType = $_GET['queryType'];
$servers = [
'Internal' => ['dns-server1', 'dns-server2', 'dns-server3'],
'External recursive' => ['dns-server8', 'dns-server9'],
'External authoritative' => ['dns-server10', 'dns-server11'],
];
$selectedServers = isset($servers[$region]) ? $servers[$region] : $servers['Internal'];
$table = '<table>';
$table .= '<thead><tr><th>Server</th><th>Query</th><th>Response</th><th>Type</th><th>TTL</th></tr></thead>';
$table .= '<tbody>';
$responses = [];
foreach ($selectedServers as $server) {
if (isset($responses[$server])) {
continue;
}
$command = "dig @$server $queryType +noall +ans $hostname";
exec($command, $output);
$rows = [];
foreach ($output as $line) {
$columns = preg_split('/\s+/', $line);
$query = $columns[0];
$ttl = $columns[1];
$type = $columns[3];
$answer = $columns[4];
$rows[] = [
'Query' => $query,
'Answer' => $answer,
'Type' => $type,
'TTL' => $ttl,
];
}
$responses[$server] = $rows;
$rowSpan = count($rows);
foreach ($rows as $index => $row) {
$table .= '<tr>';
if ($index === 0) {
$table .= '<td rowspan="' . $rowSpan . '">' . $server . '</td>';
}
$table .= '<td>' . $row['Query'] . '</td>';
$table .= '<td>' . $row['Answer'] . '</td>';
$table .= '<td>' . $row['Type'] . '</td>';
$table .= '<td>' . $row['TTL'] . '</td>';
$table .= '</tr>';
}
}
$table .= '</tbody>';
$table .= '</table>';
echo $table;
?>