全面的服务器端验证

时间:2008-09-28 21:56:16

标签: php regex validation sql-injection server-side

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

  • 确保输入不为空或太长

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

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

  • 编码某些html标记,例如< script> (所有标签在存储在数据库中时都会被编码,有些标签在查询时会被解码以在页面中呈现)

有什么我想念的吗?代码示例或正则表达式欢迎。

5 个答案:

答案 0 :(得分:8)

您不需要“转义”查询字符串以防止SQL注入 - 您应该使用预准备语句。

理想情况下,您的输入过滤将在任何其他处理之前发生,因此您知道它将始终被使用。因为否则你只需要错过一个易受问题影响的地方。

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

这个问题/答案有一些你正在寻找的好的回应 (面向PHP,但是你没有指定语言/平台,其中一些适用于php世界):

  

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

答案 4 :(得分:1)

您可以查看Filter Extension进行数据过滤。它不能保证你完全不透气,但我个人感觉好多了,因为那段代码有很多眼球看着它。

另外,请考虑借调的预备陈述。在SQL查询中转义数据已成为过去。