我想在我的页面上启用评论发布,所以我需要在发送帖子并将其插入数据库之前执行一些 html 编码。
理想的一面是什么?
服务器端(我使用 asp.net)还是客户端(javascript)?
我想在我的页面上启用评论发布,所以我需要在发送帖子并将其插入数据库之前执行一些 html 编码。
理想的一面是什么?
服务器端(我使用 asp.net)还是客户端(javascript)?
如果您的意思是清理用户输入,那么您可以安全地做到这一点的唯一地方是服务器端。您无法确定客户端是否已完成任何操作,绕过客户端代码太容易了。
这就像数据验证:在客户端上进行数据验证(例如确保表单的关键字段填写有效值)很好,因为即时反馈可以带来良好的用户体验,但这样做并不能替代在服务器上执行此操作,因为绕过客户端验证非常容易。
但是通过清理输入,您甚至不想尝试在客户端进行操作;假设它没有经过消毒并在服务器上对其进行消毒。
在 ASP.Net 中,如果您要清理的输入是稍后要在 HTML 页面中显示的字符串,并且您希望确保它不包含自己的 HTML 标记,则可以使用HttpServerUtility.HtmlEncode
对字符串进行编码(基本上,<
变成<
等)。
毫无疑问,绝对是服务器端。但是,我会在输出到浏览器之前而不是在输入到数据库之前对输入进行编码。
如果您使用的是 ASP .NET MVC,则可以使用 helper 方法。
<%= 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>" %>
当然你应该去server side
。
如果您在客户端执行此操作,用户可以轻松获得您正在使用的加密。
如果是服务器端,应该更安全。
一种方法是将您的页面保持在 UTF-8 格式,以适应用户可能输入的任何内容
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
在输出的标题中,并将数据库也保存在 unicode 中。您永远无法确定用户将要输入什么。
Every database stack also delivers the means to escape possibly malicious content, e.g. mysql_real_escape_string
MySQL function in PHP.