【问题标题】:Sanitize val() to append to avoid XSS清理 val() 以附加以避免 XSS
【发布时间】:2022-11-23 04:15:04
【问题描述】:

目前我正在使用 checkmarx 来查找 mi 代码的漏洞。 当我使用 jquery val() 函数然后尝试附加此 val 时,javascript 文件显然存在一些潜在的 xss 漏洞。我应该如何解决、清理或编码以避免这个问题?

这里有一些关于 checkmarx 标记为漏洞的例子:

function insertContactToTable(table) {
   var ContactId = jQuery("#select_contacts").val();
   var ContactName = jQuery("#select_contacts option:selected").text();
   var Type = jQuery("#select_contact_type").val();
   if (ContactId != "" && Type != "") {
      var ID = ContactId + "_" + Type;
      var Img = "<img class='image pointer-item' src='/app/assets/img/icon-package/cross.png' alt='cross' onClick='removeTableLine(\"" + ID + "\")'/>";
      if (jQuery("#" + table + " tbody tr:last").length > 0) {
         jQuery("#" + table + " tbody tr:last").after("<tr id='" + ID + "' name='" + ID + "'><td id='" + ID + "' name='contact_list'>" + ContactName + "</td><td>" + Type + "</td><td>" + Img + "</td></tr>");
      } else {
         jQuery("#" + table + " tbody").html("<tr id='" + ID + "' name='" + ID + "'><td id='" + ID + "' name='contact_list'>" + ContactName + "</td><td>" + Type + "</td><td>" + Img + "</td></tr>");
      }
   }
   ...

它标记了以下错误:

在 app\assets\js\administration.js 的第 542 行,应用程序的 insertContactToTable 在生成的输出中嵌入了不受信任的数据。这种不受信任的数据未经适当的清理或编码就直接嵌入到输出中,使攻击者能够将恶意代码注入到输出中。

线路542是个jQuery("#select_contacts").val();但它与其他使用 .val() 和 .text() 函数的行一样。

此外,在获取此 .val() 或 .text() 函数并尝试将它们与 append() 或 html() 函数一起使用时,其他函数也会发生相同的情况。

最后,我在获取 ajax 响应并尝试使用 append() o html() 附加它时也遇到了同样的问题。

注意:我在我的项目中使用 php,用它清理大部分变量。

【问题讨论】:

    标签: javascript jquery xss checkmarx


    【解决方案1】:

    不要创建一个 HTML 字符串,创建一个 DOM 对象并设置它的属性。

    if (ContactId != "" && Type != "") {
      var ID = ContactId + "_" + Type;
      var Img = jQuery("<img>", {
        "class": 'image pointer-item',
        alt: 'cross'
      }).click(function() {
        removeTableLine(ID);
      });
    
      var row = $("<tr>", {
          id: ID,
          name: ID
        })
        .append($("<td>", {
          id: ID,
          name: 'contact_list',
          text: ContactName
        }))
        .append($("<td>").append(Img))
      $("#" + table + " tbody").append(row);
    }

    根据是否已经有最后一行,您不需要不同的代码。只需将新行附加到表体即可。

    您还有另一个问题,您对行中的 &lt;tr&gt; 和第一个 &lt;td&gt; 使用了相同的 ID。如果你真的需要他们都有一个 ID,他们应该有不同的 ID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-07
      • 2021-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      相关资源
      最近更新 更多