缩略图

Input 类的使用

2025年11月14日 文章分类 会被自动插入 会被自动插入
本文最后更新于2025-11-14已经过去了15天请注意内容时效性
热度66 点赞 收藏0 评论0

在 emlog 模板开发中,正确处理用户输入是保证网站安全的关键。很多开发者习惯直接使用 $_GET$_POST 来获取数据,这种做法存在严重的安全隐患。

为什么模板中必须使用 Input 类?

直接使用超全局变量的风险:

// ❌ 危险做法 - 可能导致 SQL 注入或 XSS 攻击
$keyword = $_GET['keyword'];
$comment = $_POST['content'];

在模板中,我们经常需要获取 URL 参数、处理搜索表单、接收用户评论等。如果不进行安全过滤,恶意用户可能通过输入特殊字符来攻击你的网站。

模板中的常用场景

1. 搜索功能处理

<?php
// 安全获取搜索关键词
$keyword = Input::getStrVar('keyword', '');
$search_type = Input::getStrVar('type', 'article');

// 在模板中使用
if (!empty($keyword)) {
    echo "搜索关键词:{$keyword}";
    echo "搜索类型:{$search_type}";
}
?>

2. 分页参数处理

<?php
// 安全获取分页参数
$page = Input::getIntVar('page', 1);
$per_page = Input::getIntVar('per_page', 10);

// 确保参数有效
$page = max(1, $page); // 页码最小为1
$per_page = max(1, min($per_page, 50)); // 每页数量限制在1-50之间
?>

3. 文章列表筛选

<?php
// 获取分类和标签筛选参数
$category_id = Input::getIntVar('category', 0);
$tag_id = Input::getIntVar('tag', 0);
$sort_by = Input::getStrVar('sort', 'newest');

// 构建查询条件
$where = [];
if ($category_id > 0) {
    $where['category'] = $category_id;
}
if ($tag_id > 0) {
    $where['tag'] = $tag_id;
}
?>

4. 评论表单处理

<?php
// 处理评论提交
if ($_POST) {
    $comment_content = Input::postStrVar('comment', '');
    $author_name = Input::postStrVar('author', '匿名用户');
    $author_email = Input::postStrVar('email', '');

    // 简单的内容验证
    if (empty(trim($comment_content))) {
        $error = '评论内容不能为空';
    } else {
        // 安全地处理评论数据
        // ... 保存评论逻辑
    }
}
?>

实际模板示例

搜索框模板片段

<!-- 搜索表单 -->
<form action="<?php echo BLOG_URL; ?>index.php" method="get">
    <input type="hidden" name="action" value="search">
    <input type="text" name="keyword" value="<?php echo Input::getStrVar('keyword', ''); ?>" placeholder="输入搜索关键词">
    <button type="submit">搜索</button>
</form>

<!-- 显示搜索结果 -->
<?php if (Input::getStrVar('action') == 'search'): ?>
    <?php
    $keyword = Input::getStrVar('keyword', '');
    if (!empty($keyword)) {
        // 执行搜索并显示结果
        echo "正在搜索:{$keyword}";
        // ... 显示搜索结果逻辑
    }
    ?>
<?php endif; ?>

分页链接生成

<?php
// 获取当前参数并保持在其他分页链接中
$current_params = [
    'category' => Input::getIntVar('category', 0),
    'tag' => Input::getIntVar('tag', 0),
    'keyword' => Input::getStrVar('keyword', '')
];

// 生成分页链接
function generate_page_url($page) {
    global $current_params;
    $params = http_build_query(array_merge($current_params, ['page' => $page]));
    return BLOG_URL . 'index.php?' . $params;
}
?>

重要提醒

  1. 始终使用 Input 类:在模板中获取用户输入时,永远不要直接使用 $_GET$_POST

  2. 设置合理的默认值:确保即使参数不存在,代码也能正常工作

  3. 模板中的简单验证:虽然 Input 类提供了基础安全过滤,但重要的业务逻辑验证应该在插件或核心中处理

  4. 保持简洁:模板中的代码应该尽量简单,复杂的逻辑应该封装到函数或类中

记住,安全是一个持续的过程。在 emlog 模板开发中,养成使用 Input 类的习惯,是构建安全网站的第一步。

安全提示:即使是模板文件,也可能被直接访问。确保所有用户输入都经过 Input 类处理,不要信任任何来自用户的数据。

正文结束 阅读本文相关话题
相关阅读
评论框
正在回复
评论列表
暂无评论,快来抢沙发吧~
sitemap