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

如何在JavaScript中用正则表达式检测输入是否含HTML/script标签防范XSS攻击

问题分析

你的代码没有达到预期效果,核心有两处问题:

  • 正则未锚定字符串首尾:RegExp("[^<>]*") 没有添加^(字符串开头标识)和$(字符串结尾标识),正则的test()方法只要在输入内容中找到任意一段符合规则的子串就会返回true。比如用户输入<script>时,正则会匹配到中间的script字符段,直接返回true,完全不会识别到前后的尖括号。
  • 正则逻辑和需求不匹配:你需要的是「只要输入包含<或>就判定为非法」,现有正则的逻辑是「匹配0个或多个非尖括号字符」,没有覆盖存在尖括号的场景。

修正方案

如果要实现「禁止输入包含HTML标签尖括号的内容」的效果,调整正则如下即可:

// 锚定首尾,要求整个输入从开头到结尾都不能出现<或>
var preventScriptsRegEx = /^[^<>]*$/;

function getValue()  {
    return document.getElementById("myinput").value;
}

function test() {
    // 输入包含尖括号时会返回false,对应非法输入
    const isLegal = preventScriptsRegEx.test(getValue());
    if (!isLegal) {
        alert("不能输入包含HTML标签的内容");
        // 后续拦截逻辑
    }
}

如果更习惯反向判断,也可以直接检测是否存在尖括号,存在就拦截:

// 匹配任意<或>
var hasTagRegEx = /[<>]/;
function test() {
    const inputVal = getValue();
    if (hasTagRegEx.test(inputVal)) {
        alert("不能输入包含HTML标签的内容");
    }
}

重要提醒:前端正则校验只能拦截普通用户的误输入,无法彻底防范XSS攻击,所有用户输入在后端存储、前端页面渲染时必须做对应的转义处理,不可仅依赖前端校验做安全防控。

内容的提问来源于stack exchange,提问作者carihep

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:36:05