【问题标题】:Bypass javascript sanitizer绕过 javascript sanitizer
【发布时间】:2015-03-09 20:41:32
【问题描述】:

我有一个 javascript sanitizer,我将 '' 和 '&' 替换为它们各自的字符编码。

str.replace(/[&<>]/g, encoding);

这些经过清理的数据被插入到数据库中,然后呈现为 ​​HTML。

喜欢, <?php echo $col1 . "\n" $col2 . "\n"; ?>

这个消毒剂能破吗?

【问题讨论】:

  • 它是做什么用的?
  • @zerkms 已编辑问题。
  • 不清楚:您是否收到了已经转义的 HTML,您想保存而不转义?为什么要在保存之前将其转义?
  • @tadman 我在保存它之前转义,因为我不希望将任何 javascript 输入到数据库中。说像
  • 数据库不关心里面有什么,它不会突然运行它。您正在谈论的是一个显示问题,其中来自数据库的任何内容无法信任,因此必须相应地进行转义。您应该关注是否以及何时显示数据而不是持久化数据时的转义。这意味着,如果您的清理规则随着时间的推移发生变化,您将不必翻阅所有旧记录并修复它们。此外,如果您放宽规则,您的旧内容将正确呈现,而不是永久删除内容。

标签: javascript encoding xss


【解决方案1】:

您的代码可以工作,但它将用单个字符串替换 和 &,而不是它们各自的编码字符串。它也可能效率不高,因为有一种浏览器原生方法,createTextNode

function escapeHtml(str) {
    var div = document.createElement('div');
    div.appendChild(document.createTextNode(str));
    return div.innerHTML;
};

http://shebang.mintern.net/foolproof-html-escaping-in-javascript/

但是,这仍然可能不安全,因为客户端可以修改 javascript 来阻止这种编码。在后端执行此操作会更安全。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    相关资源
    最近更新 更多