展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > PHP安全处理用户输入的技巧与方法

PHP安全处理用户输入的技巧与方法

答案是安全处理PHP用户输入需遵循过滤与验证结合、参数化查询、输出转义等原则。首先对所有外部数据进行即时验证和过滤,使用filter_var()校验数据类型并清理非法字符,确保输入合法;其次在输出时使用htmlspecialchars()防止XSS攻击,将特殊字符转为HTML实体;最关键的是采用PDO或MySQLi的参数化查询防御SQL注入,通过预处理语句分离SQL结构与数据,杜绝恶意代码执行;同时针对文件上传、CSRF等风险实施白名单校验、令牌机制等深度防御措施,构建多层次安全体系。

本文目录

    答案是安全处理PHP用户输入需遵循过滤与验证结合、参数化查询、输出转义等原则。首先对所有外部数据进行即时验证和过滤,使用filter_var()校验数据类型并清理非法字符,确保输入合法;其次在输出时使用htmlspecialchars()防止XSS攻击,将特殊字符转为HTML实体;最关键的是采用PDO或MySQLi的参数化查询防御SQL注入,通过预处理语句分离SQL结构与数据,杜绝恶意代码执行;同时针对文件上传、CSRF等风险实施白名单校验、令牌机制等深度防御措施,构建多层次安全体系。

    php如何安全地处理用户输入数据?php用户输入数据过滤与验证

    在PHP应用开发中,安全地处理用户输入数据,核心就在于“不信任任何来自外部的数据”。这意味着我们需要对所有用户提交的信息进行严格的过滤和验证,确保它们符合预期的格式、类型和安全标准,才能进一步处理或存储。这是一个基本原则,也是构建健壮、安全应用的基础。

    解决方案

    处理PHP用户输入数据的安全问题,其实是一个多层次、系统性的工程。它远不止是简单地调用几个函数那么直接,更需要一种防御性的思维模式。

    首先,我们得明确过滤和验证的区别。验证 (Validation) 是确认数据是否符合我们预设的规则,比如一个邮箱地址是否是合法的格式,一个年龄是否在合理的区间内。如果数据不符合,就应该拒绝它。而过滤 (Filtering / Sanitization) 则是清理或转换数据,移除其中潜在的恶意或不必要的部分,使其变得“干净”或“安全”,例如去除HTML标签,或者转义特殊字符。两者相辅相成,缺一不可。

    具体到实践,我通常会这样做:

    1. 即时验证与过滤: 当数据一进入应用层,比如通过$_GET、$_POST、$_REQUEST甚至$_FILES接收到时,就立即进行初步的验证和过滤。对于字符串,我会考虑使用trim()去除首尾空白,然后根据预期用途选择filter_var()配合FILTER_SANITIZE_STRING(尽管在PHP 8.1+中已废弃,推荐使用htmlspecialchars()或自定义清理),或者直接针对特定类型如FILTER_SANITIZE_EMAIL、FILTER_SANITIZE_URL。数字类型则用FILTER_VALIDATE_INT或FILTER_VALIDATE_FLOAT,如果验证通过,再进行类型转换。

    2. 严格的数据类型检查: PHP是弱类型语言,这在方便的同时也带来了隐患。明确地将用户输入转换为期望的数据类型至关重要。例如,期望一个整数时,即使通过filter_var($input, FILTER_VALIDATE_INT)验证了,我还是会再用intval()或进行强制类型转换,确保后续操作不会因为类型不匹配而产生意外。

    3. 使用参数化查询(Prepared Statements): 这是防御SQL注入的“黄金法则”。无论使用PDO还是MySQLi,都必须用参数化查询来与数据库交互。它将SQL语句的结构和数据彻底分离,数据库驱动会确保数据不会被解释为可执行的SQL代码。任何直接将用户输入拼接到SQL查询中的行为,都是在为自己挖坑。

    4. 针对输出的转义: 过滤和验证是针对“输入”的,而转义 (Escaping) 则是针对“输出”的。当你将用户数据展示到HTML页面、写入日志文件、或者作为命令行参数时,都需要根据输出上下文进行相应的转义。最常见的莫过于防止XSS攻击,这时htmlspecialchars()或htmlentities()就派上用场了,它将HTML特殊字符转换为实体,使浏览器无法将其解析为可执行的HTML或JavaScript。

    5. 文件上传的深度防御: 文件上传是一个高风险区域。除了验证文件类型(MIME类型和扩展名白名单,而非黑名单)、大小外,更要关注文件内容。比如,图片文件可以用getimagesize()检查是否真的是图片。更重要的是,上传的文件应该存储在Web根目录之外,并生成一个随机且唯一的文件名,以防路径遍历和文件覆盖。

    6. CSRF保护: 对于会改变服务器状态的操作(如表单提交、删除数据),我会加入CSRF(跨站请求伪造)令牌。每次表单生成时,都包含一个随机、有时效性的隐藏字段,并在提交时验证这个令牌。

    说到底,没有银弹,安全是一个持续对抗的过程。我们需要时刻保持警惕,并不断更新自己的防御策略。

    常见的安全风险有哪些,以及未经验证的用户输入如何在PHP应用中导致这些问题?

    未经验证的用户输入,简直是打开了潘多拉的魔盒,它能让PHP应用面临各种各样的攻击,轻则数据泄露,重则整个系统被控制。这绝不是危言耸听,而是无数血淋淋的案例总结出来的教训。

    最常见的风险包括:

    • SQL注入 (SQL Injection): 这是最臭名昭著的攻击之一。当用户输入被直接拼接到SQL查询中,攻击者可以注入恶意的SQL代码,从而绕过认证、读取、修改甚至删除数据库中的所有数据。例如,一个登录表单,如果用户输入' OR '1'='1,而你的查询是SELECT * FROM users WHERE username='$username' AND password='$password',那么这个恶意输入就能让查询条件永远为真,无需密码即可登录。
    • 跨站脚本攻击 (Cross-Site Scripting, XSS): 当用户输入(如评论、留言)包含恶意脚本(通常是JavaScript),并且这些脚本在未经转义的情况下被输出到其他用户的浏览器中时,XSS就发生了。攻击者可以窃取用户的Cookie(会话劫持)、修改页面内容、重定向用户,甚至利用浏览器漏洞。
    • 跨站请求伪造 (Cross-Site Request Forgery, CSRF): 攻击者诱骗用户点击一个恶意链接或访问一个恶意网站,该网站会在用户不知情的情况下,以用户的身份向目标网站发送请求。如果目标网站没有CSRF令牌验证,就会执行这些恶意请求,比如修改用户密码、发送邮件等。
    • 文件包含漏洞 (File Inclusion Vulnerabilities, LFI/RFI): 如果PHP脚本允许用户输入作为文件路径的一部分来包含文件,攻击者可以利用本地文件包含 (LFI) 来读取服务器上的敏感文件(如/etc/passwd),或者利用远程文件包含 (RFI) 来包含并执行远程服务器上的恶意脚本,从而完全控制服务器。
    • 命令注入 (Command Injection): 当PHP应用需要执行系统命令(如exec()、shell_exec()、system())时,如果用户输入被直接作为命令参数,攻击者可以注入额外的命令,从而在服务器上执行任意操作。
    • 不安全的文件上传: 如果没有对上传文件的类型、大小、内容进行严格验证,攻击者可以上传恶意脚本文件(如PHP shell),然后通过访问这些文件来执行代码,获取服务器控制权。即使是看似无害的图片,也可能被植入恶意代码。
    • 会话劫持与会话固定 (Session Hijacking/Fixation): 如果会话ID在URL中传递、或者在登录前就分配了会话ID且未在登录后重新生成,攻击者可以通过窃取会话ID或诱骗用户使用预设的会话ID来冒充用户。

    这些问题之所以发生,归根结底就是因为我们对“外部世界”不够警惕。任何来自用户、来自网络、来自文件系统的数据,都应该被视为潜在的威胁,直到它通过了我们的严格审查。

    PHP中,filter_var() 和 htmlspecialchars() 在处理用户输入时分别扮演什么角色?它们应该如何配合使用?

    在PHP的安全实践中,filter_var() 和 htmlspecialchars() 是两个非常核心但用途截然不同的函数。理解它们的职责和协作方式,是构建安全应用的关键一步。

    filter_var() 的角色:

    filter_var() 是PHP的过滤扩展(Filter Extension)的核心函数,它主要用于验证和清理(过滤)用户输入。它的设计理念是提供一个统一的接口来处理各种数据类型,无论是字符串、整数、浮点数、邮箱、URL,还是IP地址。

    • 验证: 当你使用FILTER_VALIDATE_*系列的过滤器时,filter_var()会检查输入数据是否符合特定的格式或规则。例如,filter_var($email, FILTER_VALIDATE_EMAIL)会判断一个字符串是否是合法的邮箱格式。如果通过验证,它会返回原始数据(或经过清理的数据,取决于过滤器);如果失败,则返回false。
    • 清理(过滤): 当你使用FILTER_SANITIZE_*系列的过滤器时,filter_var()会从输入数据中移除或转义不安全的字符,使其变得“干净”。例如,filter_var($string, FILTER_SANITIZE_STRING)(在PHP 8.1+中已废弃,但其理念是移除或编码HTML标签及特殊字符)或filter_var($url, FILTER_SANITIZE_URL)会移除URL中非法字符。

    filter_var() 的强大之处在于其灵活性和预定义的大量过滤器,它能帮助我们快速、有效地对各种类型的输入进行初步的审查和处理。

    htmlspecialchars() 的角色:

    htmlspecialchars() 的职责则更为专一和明确:它用于防止跨站脚本攻击 (XSS)。它的工作原理是将HTML中的特殊字符转换为HTML实体。

    具体来说,它会转换以下五个字符:

    • & (ampersand) becomes &
    • " (double quote) becomes " (当设置了ENT_NOQUOTES时不会转换)
    • ' (single quote) becomes ' (只有当设置了ENT_QUOTES或ENT_HTML5时才会转换)
    • < (less than) becomes <
    • > (greater than) becomes >

    通过这种转换,浏览器就不会将这些字符解释为HTML标签或JavaScript代码,而是作为纯文本显示。

    它们如何配合使用?

    理解了各自的职责,它们的配合使用逻辑就非常清晰了:

    1. filter_var() 用于处理“输入”: 当你从用户那里接收到数据时,首先使用filter_var()进行验证和初步的清理。比如,如果用户提交了一个邮箱地址,你首先用filter_var($email, FILTER_VALIDATE_EMAIL)来确认它是一个有效的邮箱格式。如果是一个可能包含HTML的文本区域,你可以用filter_var($text, FILTER_SANITIZE_FULL_SPECIAL_CHARS)(PHP 8.1+推荐)来初步处理。这个阶段是确保数据在进入你的业务逻辑和数据库之前是“合法”且“干净”的。

    2. htmlspecialchars() 用于处理“输出”: 当你需要将之前从数据库中取出或经过处理的用户数据展示到HTML页面上时,就应该使用htmlspecialchars()。无论这些数据是否经过filter_var()的清理,在输出到浏览器之前,都应该再次进行htmlspecialchars()处理。这是因为即使数据在存储时是干净的,但如果在显示时没有转义,仍然可能被利用进行XSS攻击。例如,你从数据库中取出一个用户提交的评论,即便它在存储前已经过filter_var()处理,但在echo到网页上时,仍然需要echo htmlspecialchars($comment, ENT_QUOTES, 'UTF-8');。

    总结来说:

    • filter_var() 关注数据的“内在质量”:它确保数据符合预期类型和格式,并移除或清理不必要的或恶意的部分,主要在数据进入系统时使用。
    • htmlspecialchars() 关注数据的“输出安全”:它确保数据在作为HTML内容呈现时不会被浏览器误解为可执行代码,主要在数据输出到HTML页面时使用。

    这两个函数不是互相替代的关系,而是互补的防御层。先用filter_var()进行输入验证和过滤,再用htmlspecialchars()进行输出转义,这是构建安全PHP应用的基本而强大的组合拳。

    如何使用PHP的PDO或MySQLi实现参数化查询,从而有效防御SQL注入攻击?

    在PHP中,防御SQL注入最可靠、最推荐的方法就是使用参数化查询(Prepared Statements)。无论是使用PHP的PDO(PHP Data Objects)扩展还是MySQLi扩展,其核心思想都是将SQL语句的结构与数据彻底分离。这意味着你先定义好SQL查询的骨架,然后“绑定”数据到这个骨架上,数据库驱动会确保这些数据只被视为数据,而不会被解释为SQL代码的一部分。

    这就像是给数据库发送一份“填空题”和一份“答案”。数据库先拿到“填空题”(预处理的SQL语句),知道哪里是参数位,然后你再把“答案”(用户输入)给它。数据库不会把“答案”当成“题目”的一部分来执行。

    使用PDO实现参数化查询

    PDO提供了一个统一的接口来访问多种数据库,是现代PHP应用中推荐的数据库抽象层。

     PDO::ERRMODE_EXCEPTION, // 错误模式:抛出异常
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,     // 默认获取关联数组
        PDO::ATTR_EMULATE_PREPARES   => false,                // 关闭模拟预处理(推荐,让数据库本身处理预处理)
    ];
    
    try {
        $pdo = new PDO($dsn, $user, $pass, $options);
    } catch (\PDOException $e) {
        throw new \PDOException($e->getMessage(), (int)$e->getCode());
    }
    
    // 2. 用户输入(假设这是从表单获取的)
    $username = $_POST['username'] ?? '';
    $password = $_POST['password'] ?? ''; // 注意:密码应该哈希后存储和比较,这里仅作示例
    
    // 3. 准备SQL语句(使用占位符,可以是问号`?`或命名占位符`:name`)
    // 方式一:问号占位符
    $sql = "SELECT id, username FROM users WHERE username = ? AND password = ?";
    $stmt = $pdo->prepare($sql);
    
    // 4. 绑定参数并执行
    // execute() 方法的参数顺序必须与SQL语句中的问号占位符顺序一致
    $stmt->execute([$username, $password]); 
    
    // 方式二:命名占位符(更清晰,尤其当参数多时)
    $sql_named = "SELECT id, username FROM users WHERE username = :username AND password = :password";
    $stmt_named = $pdo->prepare($sql_named);
    
    // 绑定参数:可以使用 bindParam() 或 bindValue()
    // bindParam() 绑定变量的引用,在 execute() 时才取值
    // bindValue() 绑定变量的值,立即取值
    $stmt_named->bindParam(':username', $username, PDO::PARAM_STR); // 明确指定参数类型
    $stmt_named->bindParam(':password', $password, PDO::PARAM_STR);
    $stmt_named->execute();
    
    // 或者更简洁地直接在 execute() 中传递关联数组
    // $stmt_named->execute([':username' => $username, ':password' => $password]);
    
    
    // 5. 获取结果
    $user = $stmt->fetch();
    if ($user) {
        echo "用户 " . htmlspecialchars($user['username']) . " 登录成功!";
    } else {
        echo "用户名或密码错误。";
    }
    
    // 示例:插入数据
    $email = $_POST['email'] ?? 'test@example.com';
    $insert_sql = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)";
    $insert_stmt = $pdo->prepare($insert_sql);
    $insert_stmt->execute([$username, $password, $email]);
    echo "新用户注册成功!";
    
    ?>

    关键点:

    • $pdo->prepare($sql):这是第一步,它告诉数据库准备好一个SQL查询模板。
    • $stmt->execute([...]) 或 $stmt->bindParam(...) 后跟 $stmt->execute():这是第二步,将用户数据安全地传递给数据库。PDO会自动处理数据的转义,防止任何注入尝试。
    • PDO::ATTR_EMULATE_PREPARES => false:强烈推荐设置此选项。它确保PHP不会在客户端模拟预处理,而是将预处理工作完全交给数据库服务器处理,这通常更安全、更高效。

    使用MySQLi实现参数化查询

    MySQLi是PHP官方为MySQL数据库提供的增强接口,也支持参数化查询。

    connect_errno) {
        echo "Failed to connect to MySQL: " . $mysqli->connect_error;
        exit();
    }
    
    // 2. 用户输入
    $username = $_POST['username'] ?? '';
    $password = $_POST['password'] ?? '';
    
    // 3. 准备SQL语句(使用问号`?`作为占位符)
    $sql = "SELECT id, username FROM users WHERE username = ? AND password = ?";
    $stmt = $mysqli->prepare($sql);
    
    // 检查是否成功准备
    if (!$stmt) {
        echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
        exit();
    }
    
    // 4. 绑定参数并执行
    // bind_param() 方法的第一个参数是一个字符串,指定每个参数的类型:
    // s = string (字符串)
    // i = integer (整数)
    // d = double (浮点数)
    // b = blob (二进制数据)
    $stmt->bind_param("ss", $username, $password); // "ss" 表示两个参数都是字符串
    
    // 执行预处理语句
    $stmt->execute();
    
    // 5. 获取结果
    $result = $stmt->get_result(); // 获取结果集
    if ($result->num_rows > 0) {
        $user = $result->fetch_assoc();
        echo "用户 " . htmlspecialchars($user['username']) . " 登录成功!";
    } else {
        echo "用户名或密码错误。";
    }
    
    // 关闭语句和连接
    $stmt->close();
    $mysqli->close();
    
    ?>

    关键点:

    • $mysqli->prepare($sql):同样是准备SQL语句。
    • $stmt->bind_param("ss", $username, $password):这是MySQLi特有的绑定方式,第一个参数是类型字符串,后面跟着要绑定的变量。类型字符串非常重要,它告诉数据库这些参数应该被视为哪种数据类型。
    • $stmt->execute():执行预处理语句。
    • $stmt->get_result():对于SELECT查询,需要调用此方法来获取结果集。

    无论选择PDO还是MySQLi,使用参数化查询都是防御SQL注入的基石。它将SQL语句和数据安全地隔离,从根本上杜绝了攻击者通过数据来改变查询逻辑的可能性。这是任何PHP开发者都必须掌握和实践的安全准则。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。