Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 全面的服务器端验证_Php_Regex_Validation_Sql Injection_Server Side - Fatal编程技术网

Php 全面的服务器端验证

Php 全面的服务器端验证,php,regex,validation,sql-injection,server-side,Php,Regex,Validation,Sql Injection,Server Side,我目前有一个相当健壮的服务器端验证系统,但我正在寻找一些反馈,以确保我涵盖了所有角度。以下是我目前所做工作的简要概述: 确保输入不是空的或太长 转义查询字符串以防止SQL注入 使用正则表达式拒绝无效字符(这取决于提交的内容) 对某些html标记进行编码,例如(所有标记在存储在数据库中时都进行编码,有些标记在查询以在页面中呈现时进行解码) 我有什么遗漏吗?欢迎使用代码示例或正则表达式。您应该对每个html标记进行编码,而不仅仅是“无效”标记。这是一场激烈的争论,但基本上可以归结为总会有一些无效

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

  • 确保输入不是空的或太长

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

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

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


我有什么遗漏吗?欢迎使用代码示例或正则表达式。

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

在专用于该任务的库中运行所有服务器端验证,以便某个方面的改进影响到所有应用程序

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

您不需要“转义”查询字符串来阻止SQL注入-您应该使用准备好的语句

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


别忘了在输出时对HTML实体进行编码,以防止XSS攻击。

这个问题/答案有一些您想要的好答案
(面向PHP,但您没有指定语言/平台,有些语言/平台适用于PHP以外的领域):

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


P>也要考虑准备好的语句。SQL查询中的转义数据已成为过去。

所有标记在存储在数据库中时都会进行编码,但我希望在页面中呈现一些标记,以便在查询时对其进行解码,但脚本标记之类的标记除外。为了反映这一点,我对问题进行了修改。在项目符号3中,我会将其改为“使用正则表达式只接受有效字符”。也就是说,指定您接受的内容,而不是试图考虑您可能拒绝的所有不好的内容。