【问题标题】: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】:

      是的。您只需要对您从用户那里接受的字符串进行编码,并且您必须在您的页面中显示。

      【讨论】:

        猜你喜欢
        • 2013-04-13
        • 1970-01-01
        • 2020-02-24
        • 1970-01-01
        • 2012-02-28
        • 1970-01-01
        • 1970-01-01
        • 2013-04-18
        • 2011-01-02
        相关资源
        最近更新 更多