[英]Comprehensive server-side validation
我目前有一个相当强大的服务器端验证系统,但我正在寻找一些反馈,以确保我已涵盖所有角度。 以下是我正在做的事情的简要概述:
确保输入不为空或太长
转义查询字符串以防止SQL注入
使用正则表达式来拒绝无效字符(这取决于提交的内容)
编码某些html标记,例如<script>(所有标记在存储在数据库中时都会被编码,有些标记在查询时会被解码以在页面中呈现)
有什么我想念的吗? 代码示例或正则表达式欢迎。
您不应该“转义”查询字符串以防止SQL注入 - 您应该使用预准备语句。
理想情况下,您的输入过滤将在任何其他处理之前发生,因此您知道它将始终使用。 因为否则你只需要错过一个易受问题影响的地方。
不要忘记在输出上编码HTML实体 - 以防止XSS攻击。
您应该编码每个html标记,而不仅仅是“无效”标记。 这是一个热门的争论,但基本上它归结为总会有一些无效的HTML组合,你将忘记正确处理(嵌套标签,一些浏览器正确解释的不匹配标签等等)。 因此,我认为最安全的选择是将所有内容存储为htmlentities,然后在输出时,从内容中打印经过验证的HTML安全子集树(作为实体)。
在专用于该任务的库中运行所有服务器端验证,以便一个区域的改进影响您的所有应用程序。
此外,还包括针对已知攻击的工作,例如目录遍历和尝试访问shell。
这个问题/答案有一些很好的回答,你正在寻找
( 面向PHP,但是你再没有指定语言/平台,其中一些适用于php世界之外 ):
您可以查看过滤器扩展以进行数据过滤。 它不能保证你完全不透气,但我个人觉得使用它会好得多,因为那段代码有很多眼球看着它。
另外,请考虑借调的准备好的陈述。 在SQL查询中转义数据已成为过去。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.