HTML编码服务器端与客户端

时间:2010-06-14 11:11:10

标签: asp.net javascript html-encode

我想在我的页面上启用评论发布,所以我需要在发送帖子并将其插入数据库之前执行一些html编码。

理想的一面是什么?
Sever方面(我使用asp.net)或客户端(javascript)?

4 个答案:

答案 0 :(得分:6)

如果您的意思是清理用户输入,那么您可以安全地执行此操作的 位置是服务器端。您不能确定客户端是否已完成任何操作,绕过客户端代码太容易了。

这就像数据验证:在客户端上进行数据验证(确保表单的关键字段填入有效值)是很好的,因为即时反馈可以提供良好的用户体验,但这样做是不能替代在服务器上执行此操作,因为绕过客户端验证很容易。

但是,通过消毒输入,您甚至不想尝试做客户端;假设它没有消毒并在服务器上消毒它。

在ASP.Net中,如果您正在清理的输入是一个字符串,您稍后将在HTML页面中显示,并且您希望确保它不包含自己的HTML标记,则可以使用{ {3}}对字符串进行编码(基本上,将<转换为&lt;等等。

答案 1 :(得分:5)

毫无疑问,绝对服务器方面。 但是,在输入到数据库之前,我会在输出到浏览器而不是之前对输入进行编码。

如果您使用的是ASP .NET MVC,则可以使用辅助方法。

<%= Html.Encode("user comment with html in it <script>alert('bad')</script>") %>

如果您在NET 4框架中使用ASP .NET(webforms或MVC),则可以使用新语法。

<%: "user comment with html in it <script>alert('bad')</script>" %>

答案 2 :(得分:1)

当然你应该选择server side

如果您在客户端进行此操作,用户可以轻松获得您正在使用的加密。

如果它是服务器端。它应该更安全。

答案 3 :(得分:0)

执行此操作的方法是将页面保持为UTF-8,以便用户输入

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

在输出的标题中,并将数据库保持在unicode中。您永远无法确定用户将要输入的内容。

每个数据库堆栈还提供了逃避可能的恶意内容的方法,例如: mysql_real_escape_string PHP中的MySQL函数。