<?php
FLAG01
<html>
<head>
<title>show message</title>
<meta charset='utf-8'>
</head>
<body>
<h1>Communication Message</h1>
<?php
include('conn.php');
$referer=$_FLAG02['FLAG03'];
$host=$_SERVER($referer);
$host=$host['host'].';'.$host['port'];
$web_host=$_SERVER['HTTP_HOST'];
if($web_host != FLAG05{
exit('nost allow.');
}
if(!isset($_SESSION['token'])){
exit('error operation.');
}
else{
$sql="select * from dcn.message";
$result=mysqli_query($conn,$sql);
while($row=mysqli_fetch_array($result)){
echo '用户名:'.$row['username'].'<br>';
echo '留言内容:'.'  '.FLAG06($row['info']);//去除标签
}
?>
}
<?php
session_start(); // FLAG01: 添加 session_start() 以启用会话
?>
<html>
<head>
<title>show message</title>
<meta charset='utf-8'>
</head>
<body>
<h1>Communication Message</h1>
<?php
include('conn.php');
$referer = $_SERVER['HTTP_REFERER']; // FLAG03: 正确获取 HTTP_REFERER
$host = parse_url($referer); // 使用 parse_url 来解析 Referer
$host = $host['host'] . ':' . $host['port']; // 拼接主机名和端口号
$web_host = $_SERVER['HTTP_HOST']; // 当前请求的主机名
if ($web_host != $host) { // FLAG05: 如果当前主机和 Referer 主机不一致,退出
exit('not allowed.');
}
if (!isset($_SESSION['token'])) { // 检查会话中的 token 是否存在
exit('error operation.');
} else {
$sql = "SELECT * FROM dcn.message"; // SQL 语句
$result = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_array($result)) {
echo '用户名:' . $row['username'] . '<br>';
echo '留言内容:' . '  ' . strip_tags($row['info']); // 去除标签
}
}
?>
</body>
</html>
-
FLAG01:
session_start()
需要启动会话,确保$_SESSION
全局变量可用。 -
FLAG03:
$_SERVER['HTTP_REFERER']
使用HTTP_REFERER
获取请求的来源 URL。 -
FLAG04:使用 parse_url 来解析 Referer
-
FLAG05:
$web_host != $host
比较当前服务器的主机名和来源 URL 的主机名,验证请求来源是否被允许。 -
FLAG06
strip_tags()
该函数会移除字符串中的所有 HTML 和 PHP 标签,只保留纯文本。