首页 技术 正文
技术 2022年11月6日
0 收藏 440 点赞 1,064 浏览 1303 个字

对于我们的程序开发来说,用户的输入是解决安全性问题的第一大入口。为什么这么说呢?不管是SQL注入、XSS还是文件上传漏洞,全部都和用户提交的输入参数有关。今天我们不讲这些问题,我们主要探讨下面对用户的输入,有一些危险的函数在未经验证的情况下是不能直接使用这些函数来进行操作的,比如:

include($g);

假设这个 $g 是用户提交的内容,我们在未经验证的情况下直接使用这个参数来包含文件,我们传递的参数为 ?g=/etc/passwd ,那么服务器上所有的用户帐号信息就很可能就直接泄露了。

另外,一些执行 shell 命令的函数还是极度危险的。

echo system($g);

当我们传递的参数是 ?g=ls -la / 时,同样的服务器目录也展示了出来,这还仅仅是显示目录结构,如果使用其它更恐怖的命令后果将不堪设想。

同理,我们经常会根据一些id或指定的文件名来操作文件,特别是在删除文件的时候,如果未加判断,那么也可能直接去删除某些非常重要的文件。

unlink('./' . $g);

我们继续将 $g 构造为 ?g=../../../xxxx ,如果在权限允许的情况下,就可以删除各种系统文件。

对这些内容,其实在 PHP 的官方手册中就已经给出了一些很好的建议,我们不妨来直接看看 PHP 手册中是如何说的。

很多 PHP 程序所存在的重大弱点并不是 PHP 语言本身的问题,而是编程者的安全意识不高而导致的。因此,必须时时注意每一段代码可能存在的问题,去发现非正确数据提交时可能造成的影响。

必须时常留意你的代码,以确保每一个从客户端提交的变量都经过适当的检查,然后问自己以下一些问题:

  • 此脚本是否只能影响所预期的文件?
  • 非正常的数据被提交后能否产生作用?
  • 此脚本能用于计划外的用途吗?
  • 此脚本能否和其它脚本结合起来做坏事?
  • 是否所有的事务都被充分记录了?

还可以考虑关闭 register_globals,magic_quotes 或者其它使编程更方便但会使某个变量的合法性,来源和其值被搞乱的设置。在开发时,可以使用 error_reporting(E_ALL) 模式帮助检查变量使用前是否有被检查或被初始化,这样就可以防止某些非正常的数据的挠乱了。

其实,只要能遵守这些建议,大部分的安全问题都能得到解决。还是那句话,不能相信用户的任何输出,在测试的时候请做好各种验证,包括但不限于边界值、特殊符号、特殊命令、越界值、目录权限等。在非必要的情况下不要使用用户的输入作为包含文件、执行脚本及文件操作的直接参数,如果一定要用的话千万要进行各种形式的过滤验证。

测试代码:

[https://github.com/zhangyue0503/dev-blog/blob/master/php/202003/source/PHP操作用户提交内容时需要注意的危险函数.php]https://github.com/zhangyue0503/dev-blog/blob/master/php/202003/source/PHP操作用户提交内容时需要注意的危险函数.php()

参考文档:

https://www.php.net/manual/zh/security.variables.php

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,118
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,590
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,435
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,206
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,842
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,927