我正在使用 textarea 从用户那里获取输入并将其显示在屏幕上。我怎样才能确保如果他们放入类似的东西
<h1>YAY, I hacked in</h1>
我只按原样显示它,它不显示为<h1>
. 必须有一个功能。帮助?:D
我正在使用 textarea 从用户那里获取输入并将其显示在屏幕上。我怎样才能确保如果他们放入类似的东西
<h1>YAY, I hacked in</h1>
我只按原样显示它,它不显示为<h1>
. 必须有一个功能。帮助?:D
正如我所评论的,如果您要将该数据发送到服务器,您应该使用各种可用的XML 解析器之一并剥离 + 验证输入。
但是,如果您需要在客户端上进行纯粹的验证,我建议您使用,它会在堆栈上document.implementation.createHTMLDocument
创建一个完全成熟的DOM 对象。然后,您可以在那里操作并return
验证您的数据。
例子:
function validate( input ) {
var doc = document.implementation.createHTMLDocument( "validate" );
doc.body.innerHTML = input;
return [].map.call( doc.body.querySelectorAll( '*' ), function( node ) {
return node.textContent;
}).join('') || doc.body.textContent;
}
称之为
validate( "<script>EVIL!</script>" );
您需要在服务器端解决这个问题。如果您在表单提交时使用 JavaScript 进行过滤,用户可以通过创建自己的页面、使用 telnet、禁用 JavaScript、使用 Chrome/FF/IE 控制台等来颠覆您的过滤器。如果您在显示时进行过滤,您就没有'没有减轻任何事情,你只是在页面上移动了断点。
例如,在 PHP 中,如果您希望只转储原始字符而不使用任何用户格式,您可以使用:
print htmlentities($user_submitted_data, ENT_NOQUOTES, 'utf-8');
在 .NET 中:
someControl.innerHTML = Server.HtmlEncode(userSubmittedData);
如果您尝试清理内容客户端以立即/预览显示,这应该足够了:
out.innerHTML = user_data.replace(/</g, "<").replace(/>/g, ">");