读《PHP安全之道》提纲挈领笔记02

5 篇文章 0 订阅

在这里插入图片描述

三、PHP编码安全

PHP项目编码过程中存在的安全漏洞,包括弱类型安全隐患、代码执行安全隐患、变量覆盖隐患、反序列化带来的安全隐患。

1、弱类型

PHP弱数据类型,比如在 == 判断的时候,不会严格检验传入的变量类型。建议使用 === 来判断变量值与类型是否完全相等。常见的集中比较方式:hash比较,bool比较,数字转换比较,switch比较。数组比较。

(1)hash比较缺陷

常用的有==!=,注意0e开头,后面都是数字的串。1⃣️hash_equals() 函数比较hash值,要求提供的两个参数必须相同长度的字符串。

(2)bool比较缺陷

注意json_decode(),unserialize()函数,部分结构结构解释成bool 类型,会造成缺陷。如

$str='{"user":true,"pass":true}',
$data=json_decide($str,true);
if($data["user"]=='root' && $data["pass"]=="password"){
echo true;
}else{
echo false;
}

结果返回 true。

所以,数据序列化后存入浏览器cookie是不安全的做法。另外,避免这种安全隐患,判断时用绝对相等 ===

(3)数字转换比较缺陷

PHP整型 有最大值 PHP_INT_MAX。对最大值进行限制,避免越界。在使用变量时先校验。

(4)switch比较缺陷

使用case 判断数字时,会对参数进行int转化。判断前也要进行数据校验。

(5)数组比较缺陷

2⃣️in_array(),3⃣️array_search()使用松散的比较来判断。他们都有第三个参数($strict),建议使用时设为true,会严格比较类型是否相等。

2、PHP代码执行漏洞

(1)代码执行函数

① 4⃣️eval()可以把字符串code 作为PHP代码执行。
② 5⃣️assert() 函数在PHP中判断一个表达式是否成立,返回真或假,也直接将PHP代码传入被执行。
③ 6⃣️preg_replace(),第一个参数的正则表达式有e修饰符时,第二个参数的字符串当作PHP代码执行。
④ 7️⃣create_function(),从传递的参数创建匿名函数。
⑤ 其他函数
容易导致代码执行的PHP函数
在这里插入图片描述

(2)代码执行防御

8⃣️ escapeshellarg()、9⃣️escapeshellcmd()函数用来保证传入的命令执行函数里的参数确实是以字符串参数的形式存在,不能被注入。

3、PHP变量安全

(1)全局变量覆盖

PHP安全配置 register_globals

(2)动态变量覆盖

一个变量的变量名可以动态的设置和使用,一个变量获取另一个变量的值作为这个变量的变量名。如

$a="hello";
$hello="word";
$word="a";
echo $a;//输出hello;
echo $$a;//输出word;
echo $$$a;//输出a
echo $$$$a;//输出hello;

为了防止全局变量覆盖,尽量避免使用动态变量。

(3)函数extract()变量覆盖

🔟extract() 从数组中将变量导入到当前的符号表。检查每个键名看是否可以作为一个合法的变量名,同时也检查和符号表中已有的变量名的冲突

extract ( array &$array [, int $flags = EXTR_OVERWRITE [, string $prefix = NULL ]] ) : int

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

为了避免全局变量覆盖,尽量不使用extract() 函数接受客户端参数。

(4)函数 import_request_variables()变量覆盖

1⃣️1⃣️import_request_variables-将 GET/POST/Cookie 变量导入到全局作用域中

(5)函数parse_str()变量覆盖

1⃣️2⃣️parse_str — 将字符串解析成多个变量。

parse_str ( string $encoded_string [, array &$result ] ) : void

如果设置了第二个变量 result, 变量将会以数组元素的形式存入到这个数组,作为替代。
极度不建议 在没有 result 参数的情况下使用此函数。

4、URL重定向安全

攻击者可以重定向目标用户到钓鱼网站或恶意网站。使用转发链接来使用户访问未经授权的页面,这可能导致恶意软件的安装或者用户密码等敏感信息的泄露

5、请求伪造攻击

(1)服务器请求伪造(Server-Side Request Forgery,SSRF)。

一般情况下,SSRF攻击的目标是企业内网系统。
SSRF 形成的原因大多是由于服务器提供了从其他服务器应用中获取数据的功能且没有对目标地址进行过滤与限制。
SSRF漏洞流程:
在这里插入图片描述

(2)SSRF漏洞的危害。使服务器资源泄露,内网服务任意扫描泄露内网信息。
(3)在PHP中容易引起SSRF的函数

file_get_contents()fsockopen()curl()等函数。

(4)容易造成SSRF的功能点

①页面分享
②页面转码
③翻译服务
④图片加载与下载
⑤图片、文章收藏功能

(5) SSRF漏洞防御

合理控制访问权限。尽可能的控制PHP的访问权限,防止穿透到内网以及访问非授权的资源。
①无特殊需要的情况下,不要从用户那里接收要访问的URL,防止用户自行构建URL地址进行穿透访问。
②在没有对服务器本身文件访问需求的情况下,建议开启PHP的open_ basedir配置, 将PHP的访问限制在特定目录下,禁止PHP随意访问服务器任意路径。
③如果必须接收用户传递的URL,建议使用白名单机制。
④如果在项目中需要获取外网资源,建议使用黑名单屏蔽内网,以避免应用被用来获取内网数据,攻击内网。

6、文件上传安全

(1)对文件类型格式进行合理的检验。建立白名单和黑名单。使用随机文件名称。

7、避免反序列化漏洞

禁止将序列化后的数据进行网络传输,不要保存在容易被修改或拦截的地方,如 cookie、url。



END

如有问题请在下方留言。

或关注我的公众号“孙三苗”,输入“联系方式”。获得进一步帮助。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值