问题描述
为了防止恶意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 (将#修改为@)