3

我正在使用 textarea 从用户那里获取输入并将其显示在屏幕上。我怎样才能确保如果他们放入类似的东西

<h1>YAY, I hacked in</h1>

我只按原样显示它,它不显示为<h1>. 必须有一个功能。帮助?:D

4

2 回答 2

2

正如我所评论的,如果您要将该数据发送到服务器,您应该使用各种可用的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>" );
于 2013-05-28T14:19:18.173 回答
1

您需要在服务器端解决这个问题。如果您在表单提交时使用 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, "&lt;").replace(/>/g, "&gt;");
于 2013-05-28T14:28:16.317 回答