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

向业务层添加HTML编码

  •  0
  • Nick  · 技术社区  · 17 年前

    在向网页添加用户输入时,应该对其进行编码(当然,除非是HTML:)以帮助防止XSS攻击等。。这样地:

    litForename.Text = HttpUtility.HtmlEncode(MyUser.Forename);
    

    我正在组装一个模板来生成我的业务逻辑层,我正在考虑使用它来完成所有的编码,只要数据从数据库中出来,在它到达UI代码之前。这将确保所有应该编码的内容都经过编码(我显然排除了包含Xhtml/Xml字符串的列)。数据访问方法上的重载将允许无编码检索数据(因此可以编辑):

    // Get a 'User' entity with all the string fields HTML encoded
    BLL.Users.GetById(int userId)
    
    // Get a 'User' entity with optional HTML encoding
    BLL.Users.GetById(int userId, bool useHtmlEncoding)
    

    谢谢

    5 回复  |  直到 17 年前
        1
  •  3
  •   Adam Ralph    17 年前

    在某些情况下,这可能是有道理的,但总的来说,我建议不要这样做。您的业务逻辑层应该只处理业务逻辑和业务逻辑。

    同样,您的控制器(假设ASP.NET MVC)应该处理在您的业务域上下文中有意义的值,而不是在预期特定类型的UI时已经更改的值。

    您的UI层是唯一应该知道并关心它是什么类型的UI的层。目前看来,您唯一的UI类型将是基于HTML的,但这种情况可能会改变。

        2
  •  1
  •   DOK    17 年前

    使用的问题 HtmlEncode 对于保存到数据库中的数据,您必须处理以下事项 & " & 做一个选择或者更新是很棘手的。

    我认为你只要使用它就会做得更好 HtmlEncode 用于在UI中显示文本。

        3
  •  1
  •   Kelsey    17 年前

    您的业务逻辑确实不应该知道您的演示文稿。无论您提供的是web、windows还是任何其他类型的UI,您的业务逻辑中都不应该包含这些细节。

        4
  •  0
  •   Jim Ferrans    17 年前

    我同意其他海报的观点,视图级数据转换属于视图生成。您可能一开始只使用基于XML的视图(例如,XHTML、用于语音浏览的VoiceXML、用于web服务的XML),但当您决定还需要JSON视图来支持AJAX交互时会发生什么情况?JSON Javascript文本使用与XML不同的转义机制。

    您还将遇到这样的情况:一个逻辑层方法需要调用另一个逻辑层方法,以实现与视图生成无关的目的。调用方法可能需要应用一些填充另一个数据库表的批量数据转换。在这种情况下,调用方法必须撤消XML转义。

        5
  •  0
  •   Paul Fisher    17 年前

    学习PHP的 magic_quotes_gpc 特征:这样的编码无疑只会让事情变得更加混乱,导致你在不该逃避的时候逃避,在该逃避的时候忘记逃避,通常是一种痛苦。在数据即将被发送到需要的地方之前,不要对数据进行编码,无论是数据库、网络还是其他地方。

    推荐文章