如何在javascript中卸载html?
我正在使用一个web服务,它将为我提供如下价值:如何在javascript中卸载html?,javascript,html,escaping,Javascript,Html,Escaping,我正在使用一个web服务,它将为我提供如下价值: var text = "<<<&&&"; 我需要把它打印成“试试Javascript中可用的escape和unescape函数 更多细节:对它的价值进行一些猜测 innerHTML实际上是解释html的浏览器 因此,
var text = "<<<&&&";
我需要把它打印成“试试Javascript中可用的escape和unescape函数
更多细节:对它的价值进行一些猜测 innerHTML实际上是解释html的浏览器 因此,<变成小于符号,因为如果在html文档中放入<,就会出现这种情况 使用&的字符串最大的安全风险是eval语句,任何JSON都可能使应用程序不安全。我不是安全专家,但如果字符串仍然是字符串,那么您应该可以
这是innerHTML安全的另一种方式。未转义的字符串正在变成html,因此不会有运行javascript的风险。只要您的代码正在创建文本节点,浏览器就不会呈现任何有害内容。事实上,如果您使用Firebug或IE Dev工具栏检查生成的文本节点的源代码,您将看到浏览器正在重新转义特殊字符 给它一个
"<script>"
节点有几种类型:元素、文档、文本、属性等
危险在于浏览器将字符串解释为包含脚本时。innerHTML属性容易出现此问题,因为它将指示浏览器创建元素节点,其中一个可以是脚本元素,或者具有内联Javascript(如onmouseover处理程序)。创建文本节点可避免此问题。我们的测试字符串指向
b&;&;&;/b
,以便更好地处理风险是什么…(或者更好的是,img src=)http://www.spam.com/ASSETS/0EE75B480E5B450F807117E06219CDA6/spamReg.png“onload='alert(document.cookie);”
用于窃取cookie的垃圾邮件)
请参见上的示例(基于您的示例,使用prototype进行取消跳过)。尝试单击四个不同的按钮以查看不同的效果。只有最后一个按钮存在安全风险。(您可以查看/编辑上的源代码)该示例实际上并没有窃取您的Cookie
createTextNode
创建文本节点和appendChild
将未更改的节点对象直接插入文档中,则安全createTextNode
并不是一个灵丹妙药:使用它来转义字符串,然后使用textContent
或innerHTML
来获取转义文本,并使用它执行其他操作,在以后的使用中不会保护您。特别是,如果使用它来填充属性,它是不安全的。这就解释了为什么使用createTextNode的传统智慧实际上并不安全
function mailpage()
{ mail_str = "mailto:?subject= Check out the " + escape( document.title );
mail_str += "&body=" + escape("I thought you might be interested in the " + document.title + ".\n\n" );
mail_str += escape("You can view it at " + location.href + ".\n\n");
location.href = mail_str;
}
上述风险条款中有一个代表性的例子:
function escapeHtml(str) {
var div = document.createElement('div');
div.appendChild(document.createTextNode(str));
return div.innerHTML;
};
var userWebsite = '" onmouseover="alert(\'derp\')" "';
var profileLink = '<a href="' + escapeHtml(userWebsite) + '">Bob</a>';
var div = document.getElementById('target');
div.innerHtml = profileLink;
// <a href="" onmouseover="alert('derp')" "">Bob</a>
函数escapeHtml(str){
var div=document.createElement('div');
div.appendChild(document.createTextNode(str));
返回div.innerHTML;
};
var userWebsite=''onmouseover=“警报(\'derp\')”;
var profileLink='';
var div=document.getElementById('target');
div.innerHtml=profileLink;
//
Im告诉我,用这种方法删除html会导致一些严重的安全问题……这就是我的观点……没问题,我是在你回答后做的……不要否决这个家伙!Escape和unescape函数现在已经被弃用了。例如,有关详细信息,请参见。尽管我不能让它用scriptalert('hi')做任何坏事/script
-出于某种原因,虽然脚本被插入,但它没有运行。但是图像的加载是,所以我利用了它…@Stobor-你能告诉我你的意思吗?我很好奇…@Jeff:已经有一段时间了,但我只是看到了你的问题。我的意思是我无法运行此页面上的脚本:-尽管查看cComputed source显示脚本标记,它不alert()
…不过,我的回答中的警告是有效的。这非常有用。因此,底线是,如果有任何来自用户的信息,应该是TextNode???@Dfectoso:这是一种方法,如果您不希望他们能够使用任何HTML功能,则可以使用这种方法。例如,如果您希望他们对文本进行样式设置,您必须弄清楚如何使用安全…对安全问题的有趣见解。如果你使用createTextNode,你是安全的。:不,根据@buffer:Ben断章取义地引用了我的答案,这有点狡猾。然而,他在其他方面是对的:使用createTextNode
构建escapeHtml
函数可能不安全。而本页的一个答案曾经建议这样做,我的措辞可能会让其他人觉得网络上其他地方使用createTextNode
的函数更安全。我已经对此进行了澄清。我刚刚发布的答案允许您输入实际的页面标题(带有&;or&;)在主题行中,…html页面的主体将显示在电子邮件的主体中。在构建用于填充元素属性的escapeHtml
方法的用例中,这是不安全的。但是,他的观点是:如果您不能100%确定正在使用函数的上下文,那么您不可能是确保此函数是安全的。createTextNode
在类似document.getElementById(“whereItGoes”).appendChild(document.createTextNode(unsafe_str))的构造中正确使用
不是他所评论的……这个问题怎么可能是重复的?这个问题比假定重复的问题要老。您可以在中看到使用innerHTML的安全问题。要避免XSS漏洞,您应该使用。您可以在另一个中看到代码示例。
function mailpage()
{ mail_str = "mailto:?subject= Check out the " + escape( document.title );
mail_str += "&body=" + escape("I thought you might be interested in the " + document.title + ".\n\n" );
mail_str += escape("You can view it at " + location.href + ".\n\n");
location.href = mail_str;
}
function escapeHtml(str) {
var div = document.createElement('div');
div.appendChild(document.createTextNode(str));
return div.innerHTML;
};
var userWebsite = '" onmouseover="alert(\'derp\')" "';
var profileLink = '<a href="' + escapeHtml(userWebsite) + '">Bob</a>';
var div = document.getElementById('target');
div.innerHtml = profileLink;
// <a href="" onmouseover="alert('derp')" "">Bob</a>