繁体   English   中英

document.write的跨站点脚本问题

[英]Cross Site Scripting issue with document.write

我正在使用一些旧代码,据报道,这些代码很容易受到跨站点脚本的攻击。 代码行是

document.write("<input type=hidden name=field1 value='" + getCookieValue('fieldval') + "' />");

该报告还提供了有关如何将恶意代码注入页面的以下示例。 通过将cookie值更新为

fieldval='><img src=x onerror=alert(1)>

任何人都可以提供有关如何修复此漏洞的见解吗?

您将需要验证来自getCookieValue的数据。 如果您期望一个数字,请确保返回的值是数字。 还要确保字段中不存在任何转义字符(例如,突破javascript的引号)。 对此的修复方法如下:

function is_valid(value) {
     // Do some check here depending on what you're expecting.
     // I also recommend escaping any quotes (i.e. " becomes \")
     // Ideally, you'd just whitelist what is acceptable input (A-Z0-9 or whatever,
     // and return false from this function if something else is present in 
     // value!)
}

var cookie_value = getCookieValue('fieldval');

if(is_valid(cookie_value)) {
    document.write('<input type="hidden name="field1" value="' + cookie_value + '" />');
}

简而言之,在document.write之前清理数据,或者最终得到一个反映的XSS。

正如上面的评论中所提到的,源自用户自己的cookie(他们自己修改的东西)的XSS并不特别令人担忧。 但是,无论采用何种编码方法,都可能出现在其他地方。 我建议您查看您的来源并确保用户的所有输入都被视为不受信任和适当消毒。

您的代码包含两个错误:

  1. 您将不受信任的数据插入到输出中而不对其进行正确编码(这为反映的XSS攻击打开了大门)
  2. 您使用document.write将纯HTML插入DOM(这为DOM XSS攻击打开了大门)

在重新发明轮子之前,你应该检查OWASP备忘单以纠正错误:

  1. OWASP XSS预防吱吱表 - 规则2
  2. 基于OWASP DOM的XSS预防备忘单 - 规则2

正如您所看到的,仅通过转义引号无法解决您的问题。 将不受信任的数据列入白名单始终是首选方式和有效建议。 为了进一步阅读有关XSS的内容,链接包含许多引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM