微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

跨站点脚本无法清除

如何解决跨站点脚本无法清除

为了防止恶意html /脚本在输入字段中输入并保存在我们的应用程序中,我们正在检查用户输入的html,如果发现,则不提交。

我们使用以下功能做到这一点

    /**
     * Parse for HTML elements to avoid cross-site scripting
     * @param str
     */
    function isHTML() {
        var str = $("#AttributeInstance").val();

        var htmltempElement = document.createElement('div');
        htmltempElement.innerHTML = str;

        for (var c = htmltempElement.childNodes,i = c.length; i--;) {
            if (c[i].nodeType == 1) {
                htmltempElement = null;
                str = null;
                return true;
            }
        }

        return false;
    }

功能运行良好。例如,如果在我们的表单上,用户输入以下内容

   <img src=a onerror=alert(1)>

函数返回true,我们不保存该值。

这是我们所谓的函数

            if (isHTML()) {
                alert("Found HTML! Stop!");
                instance = "";
                $("#AttributeInstance").val(""); //clear the input field
            }
            else {
                alert("No HTML! Continue");
                alert(instance);
                addKpi(group,name,instance,instanceSelection);
            }

            alert("Finished");

现在是问题所在。此代码导致出现“ Found HTML!Stop!”警报。然后显示“完成”。

但是随后我们也收到警报“ 1”,该警报来自包含脚本的原始输入值。至此,该字段已被清除,我们不会将恶意脚本值存储在任何地方,但是,即使已明确检测到该恶意脚本值,我们也会停止处理。

有什么想法吗?或有任何建议如何更好地检测输入字段中的跨站点脚本值?

如果我们从函数删除以下内容

    htmltempElement.innerHTML = str;

    for (var c = htmltempElement.childNodes,i = c.length; i--;) {
        if (c[i].nodeType == 1) {
            htmltempElement = null;
            str = null;
            return true;
        }
    }

然后脚本不会弹出“ 1”。以这种方式检查脚本有些事情,最终似乎处理了该脚本。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。