繁体   English   中英

全面的服务器端验证

[英]Comprehensive server-side validation

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

  • 确保输入不为空或太长

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

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

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

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

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

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

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

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

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

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

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

用PHP清理用户输入的最佳方法是什么?

您可以查看过滤器扩展以进行数据过滤。 它不能保证你完全不透气,但我个人觉得使用它会好得多,因为那段代码有很多眼球看着它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM