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

全面的服务器端验证

  •  3
  • conmulligan  · 技术社区  · 17 年前

    我目前有一个相当强大的服务器端验证系统,但我正在寻找一些反馈,以确保我已经涵盖了所有的角度。以下是我目前所做工作的简要概述:

    • 确保输入不为空或太长

    • 转义查询字符串以防止SQL注入

    • 使用正则表达式拒绝无效字符(这取决于提交的内容)

    • 对某些HTML标记进行编码,如<script>(所有标记在存储在数据库中时进行编码,有些标记在查询以在页面中呈现时进行解码)

    我有什么东西不见了吗?欢迎使用代码示例或正则表达式。

    5 回复  |  直到 17 年前
        1
  •  8
  •   Steve Kemp    17 年前

    为了防止SQL注入,不需要“转义”查询字符串——应该使用准备好的语句。

    理想情况下,您的输入过滤将在任何其他处理之前进行,因此您知道它将始终被使用。因为否则你只需要错过一个地方,就可以容易地遇到问题。

    不要忘记在输出时对HTML实体进行编码-以防止XSS攻击。

        2
  •  2
  •   Vinko Vrsalovic    17 年前

    您应该对每个HTML标记进行编码,而不仅仅是“无效”标记。这是一个热门的争论,但归根结底,总是会有一些无效的HTML组合,你会忘记正确处理(嵌套标签,不匹配的标签,一些浏览器解释“正确”等等)。因此,在我看来,最安全的选择是将所有内容存储为HTMLEntities,然后在输出时打印内容中经过验证的HTML安全子集树(作为Entities)。

        3
  •  1
  •   community wiki anonymous    17 年前

    在专用于该任务的库中运行所有服务器端验证,以使一个区域的改进影响到所有应用程序。

    此外,还包括针对已知攻击的工作,例如目录遍历和访问shell的尝试。

        4
  •  1
  •   Community Mohan Dere    9 年前

    这个问题/答案有一些很好的回答,您正在寻找
    ( 面向PHP,但是您又没有指定语言/平台,其中一些应用超出了PHP的范围。 ):

    What's the best method for sanitizing user input with PHP?

        5
  •  1
  •   Bob Somers    17 年前

    您可以查看 Filter Extension 用于数据筛选。它不能保证你完全不透气,但就我个人而言,使用它感觉好多了,因为代码有很多眼球在看它。

    另外,考虑附议的准备声明。在SQL查询中转义数据是过去的事情。