Javascript 如何删除除特定属性外至少具有一个属性的标记?
我有一个文本区,我的网站的用户在其中输入他们自己的内容(基于降价标准),然后在我的网站上发布 我使用的库(根据Javascript 如何删除除特定属性外至少具有一个属性的标记?,javascript,jquery,html,Javascript,Jquery,Html,我有一个文本区,我的网站的用户在其中输入他们自己的内容(基于降价标准),然后在我的网站上发布 我使用的库(根据keydown将标记转换为HTML)生成没有属性的标记。因此,为了保护UI不受用户输入内容的影响,我有以下代码: function cleanHtml(html) { var $doc = $('<span>' + html + '</span>'); $('*', $doc).each(function (index, el) {
keydown
将标记转换为HTML)生成没有属性的标记。因此,为了保护UI不受用户输入内容的影响,我有以下代码:
function cleanHtml(html) {
var $doc = $('<span>' + html + '</span>');
$('*', $doc).each(function (index, el) {
if (el.hasAttributes('attributes')) {
while ($(el).contents().length) {
$(el).contents().last().insertAfter(el);
}
$(el).remove();
}
});
return $doc.html();
}
现在我需要编辑cleanHtml()
函数来删除除上述两个示例之外的所有具有属性的标记
如何执行此操作?检查$(el).attr('src')
或$(el).attr('src')
是否返回未定义的:
el.hasAttributes('attributes') && ( !$(el).attr('src') && !$(el).attr('href') )
$('*')。每个(函数(i,el){
if(el.hasAttributes('attributes')&(!$(el.attr('src')&&!$(el.attr('href')){
$(el).remove();
}
});代码>
p{
宽度:100px;
高度:100px;
背景:ddd;
}
什么是hasAttributes()
定义?好了,jQuery有hasAttr()
@AdamAzad在你的情况下,这不会被删除(应该是):mylink
@stack,你是对的,我附加了一段代码。请记住,用户输入可以修改为向img tag.upvote注入带有XSS代码的onload
,我明白了,谢谢你的提示。如何使我的UI安全地抵御XSS攻击?从循环中的节点中删除这些属性应该很简单。我建议在服务器端检查这些属性,因为用户总是可以篡改HTTP请求的数据。如果服务器端是Node.js,则可以加载cheerio(类似于jQuery的库,用于修改DOM字符串)。:)祝你好运,快乐
el.hasAttributes('attributes') && ( !$(el).attr('src') && !$(el).attr('href') )