说我有一个textBox和一个属性来获取并设置其值:
public SomeText
{
get { return HttpUtility.HtmlEncode(textBox.Text); }
set { textBox.Text = HttpUtility.HtmlEncode(value); }
}
我已经使用HtmlEncode来防止Javascript注入攻击。在考虑了一下之后,尽管我在想我只需要在吸气剂上使用HtmlEncode。该设置程序仅由系统使用,不能由外部用户访问。
这是正确的吗?
是。您只需要对用户接受的字符串进行编码,并且必须在页面内部显示。
几分;
第一:
您实际上应该只在显示值时对值进行编码,而在任何其他时间都不应。通过在从框中获取值时以及在粘贴时对它们进行编码,最终可能会陷入混乱,每当有人编辑值时,情况就会越来越糟。在大多数情况下,在保存到数据库时,您不应该对值进行编码(针对HTML / JavaScript注入-当然,您需要防止SQL注入),尤其是在以后可以编辑该值时。在这种情况下,实际上,您需要在重新加载它后对其进行解码,而不是再次对其进行编码。但是又仅在显示时进行编码(包括显示以供编辑,顺便说一句)]
第二:
HtmlEncode
可以防止注入HTML-可以包含将运行Javascript的<script>
块,为true。但这也可以防止与Java无关的一般恶意HTML。但是防止Javascript注入几乎是另一回事。也就是说,如果您可能曾经显示过用户在javascript alert('%VARIABLE');
中输入的内容,则您必须在其中进行与您正在执行的编码完全不同的编码。