首页 > 解决方案 > JS正则表达式在文本(原始html)之间添加文本?

问题描述

我试图阻止设置为 HTML 的原始文本的制表符。例如,如果我有Check out more information here: <a href="linktobadsite.com">Click me</a>,我希望能够'rel="noreferrer"仅将 a 添加到锚标记内的属性。我想出的最好方法是,value.replace(/href/g, 'rel="noreferrer" href');但如果我有这样的文本,例如“在锚标记内设置 href”,它将显示为“在锚标记内设置 href 'rel="noreferrer"”。仅在<a href="" _target>文本之间添加 noreferrer 的正确表达是什么?

标签: javascripthtmlregex

解决方案


我猜您正在从用户那里收到此文本,并希望将其显示给其他用户,从而最大限度地减少攻击者成功窃取某些信息的机会。

所以假设你解析这个文本并在 JS 中有一个 HTML 表示,然后你可以遍历这个对象并为每个锚添加rel=noreferrer属性。

然后,您可以再次将其序列化为字符串并将其“安全”地显示给其他用户。

永远不要相信用户输入,总是验证它。

这是很多工作。

我对这个问题的看法是在您的回复中发送一个额外的标题。标题Referrer-Policy最适合您的情况,因为您可以将其设置为same-origin并完成此操作。

一旦您的用户加载您的网站(并且您发送所有标题和内容),浏览器将记住此政策

same-origin 将针对同站点的来源发送引荐来源网址,但跨域请求不会发送引荐来源网址信息。

这意味着对于指向不同域的每个链接,当链接被访问时,浏览器将不会发送任何推荐人信息。

您可以在此处找到有关 Referrer-Policy标头值的更多信息。

显然,这将在整个站点范围内强制执行该策略,或者至少在浏览器收到新的标头值之前。

如果您无法设置额外的标头,您可以使用metaHTML 文档中的标签设置此政策

<meta name="referrer" content="same-origin">

推荐阅读