【问题标题】:Javascript injection attack prevention for textboxes文本框的 Javascript 注入攻击预防
【发布时间】:2011-05-15 23:15:12
【问题描述】:
假设我有一个文本框和一个属性来获取和设置它的值:
public SomeText
{
get { return HttpUtility.HtmlEncode(textBox.Text); }
set { textBox.Text = HttpUtility.HtmlEncode(value); }
}
我使用 HtmlEncode 来防止 Javascript 注入攻击。在考虑之后,虽然我认为我只需要 getter 上的 HtmlEncode 。 setter 仅供系统使用,外部用户无法访问。
这是正确的吗?
【问题讨论】:
标签:
c#
javascript
asp.net
security
【解决方案1】:
几点;
第一:
您实际上应该只在显示值时对其进行编码,而不是任何其他时间。通过在您从框中获取值时对它们进行编码,并且当您粘贴时,您最终可能会遇到真正的混乱,每当有人编辑这些值时,情况就会变得越来越糟。在大多数情况下,您不应该在保存到数据库时对值进行编码(防止 HTML/Javascript 注入 - 当然,您确实需要防止 SQL 注入),特别是如果该值以后可以编辑。在这种情况下,您实际上需要在将其加载回来时对其进行解码...而不是再次对其进行编码。但又一次;仅在显示时进行编码要简单得多(包括显示以进行编辑,顺便说一句)
第二:
HtmlEncode 防止注入 HTML - 它可以包括一个运行 Javascript 的 <script> 块,真的。但这也可以防止与 Javascript 无关的一般恶意 HTML。但是防止 Javascript 注入几乎是另一回事。也就是说,如果您可能曾经显示用户在 javascript alert('%VARIABLE'); 中输入的内容,那么您必须在那里执行与您正在执行的操作完全不同的编码。
【解决方案2】:
是的。您只需要对您从用户那里接受的字符串进行编码,并且您必须在您的页面中显示。