我正在使用textarea从用户那里获取输入并将其显示在屏幕上。我怎样才能确保他们输入类似
的内容<h1>YAY, I hacked in</h1>
我只是按原样显示它,并且它不会显示为<h1>
。必须有一个功能。救命? :D
答案 0 :(得分:2)
正如我评论的那样,如果您要将该数据发送到服务器,则应使用各种 XML Parsers 中的一种,并剥离+验证输入。
但是,如果您需要在客户端上进行纯粹验证,我建议您使用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>" );
答案 1 :(得分:1)
您需要在服务器端解决此问题。如果您在表单提交时使用JavaScript进行过滤,则用户可以通过创建自己的页面,使用telnet,禁用JavaScript,使用Chrome / FF / IE控制台等来破坏过滤器。如果您在显示时过滤,则可以使用#39; t减轻了任何事情,你只是在页面上移动了突破点。
例如,在PHP中,如果您希望仅使用用户的格式转储原始字符,则可以使用:
print htmlentities($user_submitted_data, ENT_NOQUOTES, 'utf-8');
在.NET中:
someControl.innerHTML = Server.HtmlEncode(userSubmittedData);
如果您正在尝试清理内容客户端以进行即时/预览显示,那么这应该足够了:
out.innerHTML = user_data.replace(/</g, "<").replace(/>/g, ">");