【问题标题】:javascript: escape html, and convert plain text links to <a> tagjavascript:转义 html,并将纯文本链接转换为 <a> 标签
【发布时间】:2014-05-13 16:45:54
【问题描述】:

我用的是下划线js转义HTML的方法:

var __entityMap = {
"&": "&amp;",
"<": "&lt;",
">": "&gt;",
'"': '&quot;',
"'": '&#39;',
"/": '&#x2F;'
};

String.prototype.escapeHTML = function() {
return String(this).replace(/[&<>"'\/]/g, function(s) {
    return __entityMap[s];
});
}

问题是这也转义了“/”,这使我的自动链接器不再工作。

我正在使用:

https://github.com/bryanwoods/autolink-js/blob/master/autolink.js

我应该怎么做才能解决这个问题?

【问题讨论】:

  • 我不明白为什么 / 首先需要转义?只需将其从 __entityMap 完全删除即可。

标签: javascript jquery html escaping


【解决方案1】:

正如 cmets 中所建议的那样 - 没有理由转义单个正斜杠 - 只需将其从要转义的字符列表中删除就不会遇到任何问题。您只需要转义如果保持不变就会破坏您的代码的字符,并且正斜杠不太可能导致任何问题。

OWASP does recommend 转义正斜杠,这可能是您在某些时候被建议这样做的原因 - 但该建议是针对从不受信任的来源加载内容。如果您正在加载自己编写的模板,则不必担心会对自己进行跨站点脚本攻击。

【讨论】:

  • 我确实从不受信任的来源加载。
  • 我不相信 - 他们的推理,“包含正斜杠,因为它有助于结束 HTML 实体” 不是一个强有力的论点(除非我错过了有没有其他引用的东西?)。如果我们退后一步......根本问题,转义 html 只有 真的 要求您转义 &lt; &gt; &amp; - 引号不会做任何伤害,但这一切都取决于您嵌入结果字符串的上下文。在我看来,正斜杠是完全没有必要的,并且建议转义它只会破坏第 3 方库,而不是期望它和/或总体上污染网络。
  • 是的,我倾向于说,因为它只与你已经逃跑的其他角色组合起来很危险,所以不值得寻找一些复杂的解决方法——只需对推荐列表做一个例外在这种情况下,因为您知道您正在逃避&lt;&gt;
猜你喜欢
  • 1970-01-01
  • 2014-04-07
  • 2014-04-21
  • 1970-01-01
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多