我想在我的页面上启用评论发布,所以我需要在发送帖子并将其插入数据库之前执行一些html编码。
理想的一面是什么?
Sever方面(我使用asp.net)或客户端(javascript)?
答案 0 :(得分:6)
如果您的意思是清理用户输入,那么您可以安全地执行此操作的 位置是服务器端。您不能确定客户端是否已完成任何操作,绕过客户端代码太容易了。
这就像数据验证:在客户端上进行数据验证(确保表单的关键字段填入有效值)是很好的,因为即时反馈可以提供良好的用户体验,但这样做是不能替代在服务器上执行此操作,因为绕过客户端验证很容易。
但是,通过消毒输入,您甚至不想尝试做客户端;假设它没有消毒并在服务器上消毒它。
在ASP.Net中,如果您正在清理的输入是一个字符串,您稍后将在HTML页面中显示,并且您希望确保它不包含自己的HTML标记,则可以使用{ {3}}对字符串进行编码(基本上,将<
转换为<
等等。
答案 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函数。