【问题标题】:Prevent XSS attack防止XSS攻击
【发布时间】:2013-02-08 06:22:41
【问题描述】:

我正在开发一个 ASP.Net C# + jQuery ajax 网站项目。我试图防止 xss 攻击,我知道下面不是完整的方法,但这至少是我应该做的 - 在接受用户的免费字符串输入时使用 HtmlEncode)。而且我真的有人来检查我是否做对了。

假设我们有一个场景,其中一个页面控件是“描述”文本框,用户可以输入用于描述其产品的“免费”字符串。为了防止获取 xss 攻击输入,在服务器端的页面方法中,我使用 HtmlUtility.HtmlEncode() 包裹了“描述”文本,因此在进入数据库之前字符串将被解释为纯文本,即 <script> 变为 >script<

接下来的部分是我所怀疑的——在将 html 编码文本返回给用户之前如何处理它?

当用户想要查看输入的描述文本时,网站从数据库中检索并打印出来。

对描述执行 html 解码是否合乎逻辑,这样用户就不会看到那些奇怪的 >< 字符?它会破坏首先使用 HtmlEncode 的目的吗?如果是,这是正确的 jQuery 行来解码和打印文本给用户???

$("#txtDescription").val($(this).html(obj.Description).text();

非常感谢你

【问题讨论】:

    标签: jquery asp.net security xss


    【解决方案1】:

    不要对进入数据库的文本进行编码。以原始、未过滤的形式存储它。如果将字符串输出到支持 HTML 的上下文(例如输出到浏览器),则仅对 HTML 字符进行编码。

    【讨论】:

    • 您好 Kolink,感谢您的回复 :)。最好将文本以其原始未过滤形式保存到数据库中,但是我的系统将需要在进入数据库之前进行包装,无论哪种方式,我都不确定如何将其打印回用户
    • 我们应该向用户打印奇怪的字符还是在打印之前先解码字符是正常的做法?如果是这样,如何处理那部分?我需要将这些值打印回文本框,它会显示类似 "><script>alert('xss')</script>非常感谢
    • 如果有人能说明为什么你不应该对进入数据库的文本进行编码会很有帮助......尤其是因为答案有 5 票赞成(页面上最多)。
    【解决方案2】:

    您需要记住您处理的每个字符串的内容类型以及它的来源 - 无论是来自安全来源还是不受信任的来源,并且还需要知道何时连接两个具有相同内容的字符串 -类型和信任级别。

    我使用HtmlUtility.HtmlEncode() 包裹了“描述”文本,因此字符串在进入数据库之前将被解释为纯文本,即&lt;script&gt; 变为&amp;gt;script&amp;lt;

    听起来你在说描述字段是一个纯文本字符串,而你在数据库中存储的是一个安全的 HTML 字符串(因为保证HtmlEncode 的输出不包含危险代码)。

    这显示了过早编码内容的第一个问题。如果您正在编写要发送到服务器的 SQL 字符串,则预编码为 HTML 并不能保护您免受 SQL 注入。使用 SQL 准备语句是 SQL 克服此问题的好方法,但预编码不会使字符串在所有上下文中都是安全的。

    接下来的部分是我所怀疑的——在将 html 编码文本返回给用户之前如何处理它?

    当用户想查看输入的描述文本时,网站从数据库中检索并打印出来。

    如果用户正在接收安全 HTML,并且您有一个安全 HTML 字符串,则可以将其发送给用户。

    如果用户正在接收纯文本电子邮件,那么您需要将存储在数据库中的安全 HTML 转换为纯文本。

    如果用户正在接收 RSS,那么您需要确保使用 XML 的子字符串来编写 RSS。

    Contextual auto-escaping 可以帮助您确保在输出时正确编码值。

    【讨论】:

      【解决方案3】:

      使用AntiXss library 代替httputility.htmlencode 是个好主意。考虑阅读文档以获得更清晰的信息。您在 AntiXSS 库 w.r.t 输入编码中有更广泛的选择。它遵循discussion 中提到的更安全的基于白名单的方法。

      【讨论】:

        猜你喜欢
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        • 2018-07-16
        相关资源
        最近更新 更多