3

最近我开始<%=在我的 Web 控件中更频繁地使用。通常我会在代码后面设置字符串属性,然后将它们吐出到表单上。

这是一个坏主意吗?

例如。

代码背后:

特性:

public string TheTitle { get; set; }
public string TheBody { get; set; }
public ContentItem TheContent { get; set; }
public string ContentId { 
  get 
    { return "content" + (TheContent != null) ? TheContent.Id.ToSTring() : "0"; }
}

页面加载:

TheTitle = TheContentItem.Title;
TheBody = TheContentItem.Body;

在页面上:

<div id='<%= ContentID %>'>    

  <h2 class='title'><%= TheTitle ?? "No Title" %></h2>
  <p><%= TheBody %></p>

</div>
4

3 回答 3

4

仅当数据未经验证时才会出现问题。

使用 .NET 4 的<%: TheBody %>语法是对可能不受信任的数据进行编码的有效方法。在较早版本的框架中,您可以使用<%= HttpUtility.HtmlEncode(TheBody) %>相同的效果。

于 2010-09-07T21:19:19.947 回答
2

如果数据来自用户输入,那就不好了,因为您的网站容易受到 XSS 的攻击。

于 2010-09-07T21:21:07.583 回答
1

不,这不是问题*,因为它将在您的控制范围内。您不必担心在您的案例中有任何冲突,但如果您使用 ID 编写服务器控件,您可能会遇到问题。

你如何使用它,好的(*假设你在将数据分配给你的变量之前已经清理了数据)。请记住,有时可能会出现 ID、控件、脚本等重复的问题......

编辑:在将其分配给您可以使用的变量之前,HttpUtility.HtmlEncode或者如果您使用 ASP.NET 4,您可以<%:根据输出的内容使用语法。这与做 aspx 的规则相同,没关系,但你只需要小心。这也是使用了多少 ASP.NET MVC。视图可以用 literred<%=<%:显然在任何 HTML 本身上使用任何类型的编码是没有用的。

于 2010-09-07T21:21:27.727 回答