分类 默认分类 下的文章

继萌ICP备案之后,一直想搞一个自己的备案系统。今天,终于完成了!

地址:https://icp.mcenahle.net

警告:以下代码经晚夜的个人博客和本人查证,存在一处严重漏洞,不建议继续使用。转到 https://blog.mcenahle.com/2024/07/19/85.html 以下载修复版。

搭建方法:

一、数据库和表

CREATE DATABASE record_system;

USE record_system;

CREATE TABLE records (
    id INT AUTO_INCREMENT PRIMARY KEY,
    site_name VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL,
    url VARCHAR(255) NOT NULL,
    site_description TEXT,
    status VARCHAR(50) DEFAULT 'pending',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE admin_users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(255) NOT NULL
);
    INSERT INTO admin_users (username, password) VALUES ('admin', 'admin123');

注意,上面的“admin”和“admin123”是后期登录管理系统的用户名和密码。

二、申请备案页面(record_form.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>申请备案</title>
</head>
<body>
    <h1>申请备案</h1>
    <form action="submit_record.php" method="post">
        <label for="site_name">网站名:</label>
        <input type="text" id="site_name" name="site_name" required><br><br>
        <label for="email">邮箱:</label>
        <input type="email" id="email" name="email" required><br><br>
        <label for="url">网址:</label>
        <input type="url" id="url" name="url" required><br><br>
        <label for="site_description">网站描述:</label>
        <textarea id="site_description" name="site_description" required></textarea><br><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

三、处理表单提交(submit_record.php)

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "record_system";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

$site_name = $_POST['site_name'];
$email = $_POST['email'];
$url = $_POST['url'];
$site_description = $_POST['site_description'];

$sql = "INSERT INTO records (site_name, email, url, site_description)
VALUES ('$site_name', '$email', '$url', '$site_description')";

if ($conn->query($sql) === TRUE) {
    echo "备案申请提交成功!";
} else {
    echo "提交失败: " . $conn->error;
}

$conn->close();
?>

四、管理员登录页面(admin_login.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>管理员登录</title>
</head>
<body>
    <h1>管理员登录</h1>
    <form action="admin_login.php" method="post">
        <label for="username">用户名:</label>
        <input type="text" id="username" name="username" required><br><br>
        <label for="password">密码:</label>
        <input type="password" id="password" name="password" required><br><br>
        <input type="submit" value="登录">
    </form>
</body>
</html>

五、处理管理员登录请求(admin_login.php)

<?php
session_start();

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "record_system";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

$username = $_POST['username'];
$password = $_POST['password'];

$sql = "SELECT * FROM admin_users WHERE username='$username' AND password='$password'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    $_SESSION['loggedin'] = true;
    header("Location: admin_dashboard.php");
} else {
    echo "用户名或密码错误";
}

$conn->close();
?>

六、管理后台页面(admin_dashboard.php)

<?php
session_start();
if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] !== true) {
    header("Location: admin_login.html");
    exit;
}

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "record_system";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

$sql = "SELECT * FROM records";
$result = $conn->query($sql);
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>管理后台</title>
</head>
<body>
    <h1>管理后台</h1>
    <table border="1">
        <tr>
            <th>ID</th>
            <th>网站名</th>
            <th>邮箱</th>
            <th>网址</th>
            <th>网站描述</th>
            <th>状态</th>
            <th>创建时间</th>
            <th>操作</th>
        </tr>
        <?php
        if ($result->num_rows > 0) {
            while ($row = $result->fetch_assoc()) {
                echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['site_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
                echo "<td>" . $row['url'] . "</td>";
                echo "<td>" . $row['site_description'] . "</td>";
                echo "<td>" . $row['status'] . "</td>";
                echo "<td>" . $row['created_at'] . "</td>";
                echo "<td><a href='update_status.php?id=" . $row['id'] . "'>更新状态</a></td>";
                echo "</tr>";
            }
        } else {
            echo "<tr><td colspan='8'>暂无数据</td></tr>";
        }
        ?>
    </table>
</body>
</html>

<?php
$conn->close();
?>

七、更新备案状态(update_status.php)

<?php
session_start();
if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] !== true) {
    header("Location: admin_login.html");
    exit;
}

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "record_system";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

$id = $_GET['id'];

$sql = "UPDATE records SET status='approved' WHERE id='$id'";

if ($conn->query($sql) === TRUE) {
    echo "备案状态更新成功!";
} else {
    echo "更新失败: " . $conn->error;
}

$conn->close();
?>

八、查询备案页面(query_record.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>查询备案</title>
</head>
<body>
    <h1>查询备案</h1>
    <form action="query_record.php" method="get">
        <label for="email">邮箱:</label>
        <input type="email" id="email" name="email" required><br><br>
        <input type="submit" value="查询">
    </form>
</body>
</html>

九、处理查询请求(query_record.php)

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "record_system";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

$email = $_GET['email'];

$sql = "SELECT * FROM records WHERE email='$email'";
$result = $conn->query($sql);
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>查询结果</title>
</head>
<body>
    <h1>查询结果</h1>
    <table border="1">
        <tr>
            <th>ID</th>
            <th>网站名</th>
            <th>网址</th>
            <th>网站描述</th>
            <th>状态</th>
            <th>创建时间</th>
        </tr>
        <?php
        if ($result->num_rows > 0) {
            while ($row = $result->fetch_assoc()) {
                echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['site_name'] . "</td>";
                echo "<td>" . $row['url'] . "</td>";
                echo "<td>" . $row['site_description'] . "</td>";
                echo "<td>" . $row['status'] . "</td>";
                echo "<td>" . $row['created_at'] . "</td>";
                echo "</tr>";
            }
        } else {
            echo "<tr><td colspan='6'>暂无数据</td></tr>";
        }
        ?>
    </table>
</body>
</html>

<?php
$conn->close();
?>

今天8点提交了一个域名 mcenahle.net,准备先备案试一下。

10点钟,2个客服分别打来了电话,一个是问服务器有没有什么信息需要了解;另一个是说上海市的备案规则。

但是,备案还是没能通过初审。原因:

  1. 主办人未成年;
  2. 域名注册商未经过工信部验证,无法备案;
  3. 网站名称不能有主办人姓名。

唉,看来上海市通信管理局不允许未成年人备案啊。那么我还是按照原计划:2024年8月21日给本站备案。希望这次能够顺利过吧...

今天,突然想去之前的美术老师那里看看,于是走起。

到了那边,人反倒更多了;之前只有15个人,现在都25个人了。

美术老师看到我了,让我坐一会;他问我,考的怎么样,能上什么学校。

去年的这个时候,正在痛苦的美术集训呢。那时候的我,怎么会知道,4个月后,我会搞起自己的网站,成为广大站长的一员。

离开画室,已是华灯初上;万家灯火之中,我又踏上了回家的归途。

半个月后,美术类专科录取结果就要公布了。结果会是如何呢?上海专科,等我来!

https://www.bilibili.com/video/BV1TS421R7EL?t=105.2

另外:

  1. 漏洞影响版本WINRAR<6.23,如果不会查看winrar版本,建议直接卸载重新安装最新版,或者改用其他解压软件。
  2. 直接解压而不在压缩包打开,理论上不会触发病毒文件,但在评论区看到不少小伙伴反应解压出来后打开txt还是中毒了,所以是否有新的组合利用方式,这一点还有待证实。
  3. 距离漏洞曝出已经11个月了,但还在被持续利用,原因就是及时更新WINRAR的用户太少了,利用难度和成功率比较高,而且这种漏洞非专业人士接触的机会不多,所以还是提高警惕吧。

——https://www.bilibili.com/video/BV1TS421R7EL/?spm_id_from=333.1007.tianma.1-2-2.click&vd_source=263df41ec33a7b7956a9bf5b4b38cc81