代码之家  ›  专栏  ›  技术社区  ›  Razor

HTML应该在持久化之前进行编码吗?

  •  14
  • Razor  · 技术社区  · 14 年前

    5 回复  |  直到 12 年前
        1
  •  16
  •   Bert F    12 年前

    数据库中的数据是真正的HTML还是应用程序数据(比如名称或注释),而您恰好知道这些数据最终将成为HTML页面的一部分?

    • 代表
    • 确保其正确 当它跨越表示边界时(在生成HTML页面时进行编码)。

    代表

    "I love M&Ms" ,而不是HTML编码的字符串 "I love M&Ms" . 从技术上讲,代码中存在的数据还不是HTML,如果数据尽可能简单、准确地表示,那么生活就更容易了。这些数据以后可能会在不同的视图中使用,例如桌面应用程序。这些数据可以存储在数据库、平面文件或XML文件中,以后可能与另一个程序共享。对于另一个程序来说,最简单的方法是假设字符串是格式的“本机”表示形式: “我爱M&“女士” 在数据库和平面文件中 在XML文件中。看到XML文件中编码的HTML编码值,我会畏缩( "I love &Ms" ).

    稍后, (例如,以HTML格式显示,存储在数据库、纯文本文件或XML文件中),那么重要的是要确保正确翻译,以便以下一个环境固有的格式准确表示。简言之,当您要在HTML页面上显示它时,请确保它被翻译为正确编码的HTML(手动或通过工具),以便在页面上准确显示该值。当您要将它存储在数据库中或在查询中使用它时,请使用转义和/或准备语句和绑定变量,以确保相同的概念值准确地表示在数据库中。当您将它存储在一个XML文件中时,您要确保它的XML编码是正确的。

    在跨越表示边界时未能正确转换是注入攻击(如SQL注入攻击)的根源。当您使用多种表示/语言(例如Java、SQL、HTML、Javascript、XML等)时,请注意这一点。

    --

    & , < 等)。

        2
  •  13
  •   Oded    14 年前

    这种做法是HTML编码之前 .

    XSS

    那个 而不是编码版本。

        3
  •  2
  •   K. Norbert    14 年前

    数据库供应商特定的输入转义,html转义输出。

        4
  •  1
  •   user2175766    11 年前

    我不同意那些认为它应该在显示时解码的人,如果它在到达数据库之前被编码,那么攻击发生的可能性只有在开发人员在显示它之前对它进行解码时才可能发生。然而,如果你在展示它之前对它进行解码,那么它总是有可能被其他新手开发人员发现,比如新员工,或者一个糟糕的实现。如果它坐在那里没有编码,它只是等待在互联网上弹出和传播像疱疹。丢失原始数据不应该是一个问题。编码+解码每次都应该产生相同的数据。就我的两分钱。

        5
  •  -1
  •   Sarfraz    14 年前

    当您允许用户(或者更确切地说是坏人)使用html标记,然后您将它们处理/插入到数据库中时,就会启动。XSS是造成大多数安全漏洞的根本原因之一。因此,在存储html之前,您肯定需要对其进行编码。