对于我们的程序开发来说,用户输入是解决安全问题的第一切入点。你为什么这么说?无论是SQL注入、XSS还是文件上传漏洞,都与用户提交的输入参数有关。今天我们不谈这些问题,主要讨论下面的用户输入,有一些危险的函数是不能不经验证直接用于操作的,比如:include($g);假设这个$g是用户提交的内容。我们直接使用此参数来包含文件而不进行验证。我们传递的参数是?g=/etc/passwd,那么服务器上的所有用户账号信息很可能会直接泄露。另外,一些执行shell命令的函数是极其危险的。回声系统($g);当我们传递的参数是?g=ls-la/时,也会显示同样的服务器目录。这只是为了显示目录结构。如果再使用其他更恐怖的命令,后果不堪设想。同理,我们经常会根据一些id或者指定的文件名来操作文件,尤其是在删除文件的时候,如果不做判断,可能会直接删除一些非常重要的文件。取消链接('./'.$g);我们继续构造$g为?g=../../../xxxx,如果权限允许,可以删除各种系统文件。对于这些内容,其实PHP官方手册中已经给出了一些很好的建议。我们来看看PHP手册是怎么说的。很多PHP程序的主要弱点并不是PHP语言本身的问题,而是由于程序员的安全意识低下造成的。因此,我们必须时刻关注每一段代码可能出现的问题,发现错误数据提交可能带来的影响。始终关注您的代码以确保正确检查从客户端提交的每个变量,然后问自己以下一些问题:此脚本是否只影响预期的文件?异常数据提交后会不会有影响?此脚本是否可以用于意外目的?这个脚本可以和其他脚本结合起来做坏事吗?是否所有交易都有充分的记录?还要考虑关闭register_globals、magic_quotes或其他使编程更容易但会弄乱变量的有效性、来源和值的设置。在开发过程中,可以使用error_reporting(E_ALL)模式来帮助检查变量在使用前是否已经检查或初始化,防止一些异常数据被乱码。事实上,只要遵循这些建议,大多数安全问题都可以得到解决。同样,您不能相信用户的任何输出。请在测试过程中进行各种验证,包括但不限于边界值、特殊符号、特殊命令、越界值、目录权限等。不要将用户输入作为包含文件、执行脚本、和文件操作,除非必要。如果必须使用它,则必须进行各种形式的过滤和验证。测试代码:【https://github.com/zhangyue05...参考文档:https://www.php.net/manual/zh/security.variables.php各媒体平台均可搜索【硬核项目经理】
