You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

输出用户提交的链接时应使用strip_tags()还是htmlspecialchars()?

结论:方案B(htmlspecialchars方案)更合理

为什么方案A不可行

strip_tags()只能移除字符串中的HTML和PHP标签,完全无法应对两类常见风险:

  • 危险协议注入:比如用户提交javascript:alert('hacked')这类URL,strip_tags()不会做任何处理,用户点击链接就会直接执行恶意脚本
  • 标签属性破坏:比如用户提交的URL包含" onclick="alert(1)",strip_tags()不会转义双引号,插入到href属性后会直接拆分原有HTML结构,注入恶意点击事件

为什么方案B更安全

htmlspecialchars()会把<、>、"、'、&这些HTML特殊字符转义为对应的实体字符,确保用户输入的所有内容都只会被当成普通文本渲染,不会破坏原有HTML结构,也不会被浏览器解析为代码执行,可以完全避免HTML注入类的XSS风险。

更完善的安全优化方案

仅用htmlspecialchars()还是无法防范危险协议类的点击XSS,建议增加以下处理逻辑:

1. 新增URL协议校验

只放行http、https、ftp这类合法公开协议,禁止javascript、vbscript、data等可执行代码的危险协议,没有带协议的用户输入可以默认补全https前缀。

2. 给链接增加安全属性

给a标签添加rel="noopener noreferrer nofollow",既可以防止新打开的页面篡改原页面,也能避免搜索引擎把用户提交的垃圾链接算成你的站点外链,影响SEO。

3. 所有用户输入字段都要转义

你当前代码里直接输出的$domain_email、$anchor、$description等字段都是用户提交的内容,不转义同样存在XSS风险,都需要用htmlspecialchars()处理。

参考实现代码

// 预处理用户提交的URL
function get_safe_user_url(string $raw_url): ?string {
    $trimmed_url = trim($raw_url);
    // 空值直接返回无效
    if (empty($trimmed_url)) return null;
    // 没有协议前缀的自动补全https
    if (!preg_match('/^[a-zA-Z]+:\/\//i', $trimmed_url)) {
        $trimmed_url = 'https://' . $trimmed_url;
    }
    // 校验协议是否合法
    $scheme = parse_url($trimmed_url, PHP_URL_SCHEME);
    if (!in_array(strtolower($scheme), ['http', 'https', 'ftp'])) {
        return null;
    }
    return $trimmed_url;
}

// 输出环节
$safe_url = get_safe_user_url($url);
if ($safe_url) {
    // 转义所有输出内容,ENT_QUOTES参数会同时转义单双引号
    $escaped_url = htmlspecialchars($safe_url, ENT_QUOTES);
    echo 'Link: <a href="' . $escaped_url . '" target="_blank" rel="noopener noreferrer nofollow"><b>' . $escaped_url . '</b></a><br>';
} else {
    echo 'Link: 无效的用户提交链接<br>';
}

// 其他用户输入字段的输出也要做转义,示例:
echo 'Submission Id: ' . htmlspecialchars($submission_id, ENT_QUOTES) . '<br>';
echo 'Submission Date And Time: ' . htmlspecialchars($submission_date_and_time, ENT_QUOTES) . '<br>';
echo 'Email: ' . htmlspecialchars($domain_email, ENT_QUOTES) . '<br>';
// 剩余字段按同样逻辑处理即可

内容的提问来源于stack exchange,提问作者Nut Cracking Dude

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:57:03