PHP代码编写黑名单过滤和白名单限制

黑名单概念

        在PHP代码中黑名单是指通过把可疑的、不安全的数据(如SQL注入攻击等)排除在外的一种防御措施。它的主要作用就是阻止一些特定的内容或者行为进入你的程序中,从而防止恶意的用户利用它们破坏系统的安全性。

例如,在PHP中,你可以使用正则表达式来检查用户的输入,如果发现它们包含了一些特定的字符或者字符串,那么就可以将它们加入到黑名单中,从而避免这些恶意的内容进入你的程序中。

白名单概念

        PHP代码中的白名单是一种机制,它允许用户输入符合特定条件的内容,而不是禁止所有内容。它的作用在于,只有符合特定条件的内容才能被添加到数据库中,而其他不符合条件的内容则会被忽略。这样就可以有效地防止黑客利用漏洞攻击你的网站。

黑名单编写

以pikachu 靶场ssrf为例

SSRF(Server-Side Request Forgery:服务器端请求伪造)

        其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制,从而导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据。

利用url访问百度,可以成功

编写黑名单后

   $URL = $_GET['url'];

    
    $substitutions = array( 'file', 'ftp', 'zlib', 'data', 'glob', 'phar','ssh2','rar','ogg',
);
$parsedUrl = parse_url($URL);
if (isset($parsedUrl['scheme']) && in_array($parsedUrl['scheme'], $substitutions)) {
    return false; // 伪协议在黑名单中,拒绝访问
}
// URL 安全,允许访问
return true;

        scheme是用来标识一种协议,如http、ftp等

代码函数解析:

  • parse_url :解析 URL,返回其组成部分

parse_url(string $url, int $component = -1): int|string|array|null|false

本函数解析 URL 并返回关联数组,包含在 URL 中出现的各种组成部分。数组的元素值不会 URL 解码。

本函数不是用来验证给定 URL 的有效性的,只是将其分解为下面列出的部分。也会接受不完整或无效的 URL,parse_url() 会尝试尽量正确解析。

  • in_array :检查数组中是否存在某个值

in_array(mixed $needle, array $haystack, bool $strict = false): bool

in_array(待搜索的值,待搜索的数组)

如果第三个参数 strict 的值为 true 则 in_array() 函数还会检查 needle 的类型是否和 haystack 中的相同

  • isset :检测变量是否已声明并且其值不为 null

isset(mixed $varmixed ...$vars): bool

利用http协议访问info1.php无法访问了

白名单编写

以pikachu靶场SSRF(file_get_content)为例 

添加白名单前,可以访问info2.php

 也可以访问本地文件hosts文件

?file=../../../../../../../../windows/system32/drivers/etc/hosts

添加白名单

 echo $filename."<br >";
 $octet = explode(".",$filename);
 echo $octet[1]."<br \>";
 if($octet[1]!="php"){
     die("黑客!!!");
 }

代码函数解析:

  • die :相当于 exit()  表示退出,结束程序执行
  • explode :使用一个字符串分割另一个字符串

explode(string $separator, string $string, int $limit = PHP_INT_MAX): array

此函数返回由字符串组成的数组,每个元素都是 string 的一个子串,它们被字符串 separator 作为边界点分割出来。

写入白名单后

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用黑名单的方式实现上传文件类型过滤,可以在服务器端对上传的文件类型进行判断,如果上传的文件类型不在指定的黑名单中,则允许上传,否则拒绝上传。 下面是一个例子,使用 PHP 语言实现上传文件类型过滤黑名单方式: ```php <?php $allowed_types = array('jpg', 'jpeg', 'png', 'gif'); // 允许上传的文件类型 $blacklist = array('php', 'php3', 'php4', 'php5', 'exe', 'sh', 'bat'); // 黑名单,禁止上传的文件类型 $file_name = $_FILES['file']['name']; // 获取上传的文件名 $file_ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION)); // 获取文件扩展名并转换为小写 if (in_array($file_ext, $blacklist)) { echo "Error: 文件类型不允许上传!"; } elseif (!in_array($file_ext, $allowed_types)) { echo "Error: 文件类型不支持!"; } else { // 文件上传代码 } ?> ``` 在上面的代码中,`$allowed_types` 变量定义了允许上传的文件类型,`$blacklist` 变量定义了禁止上传的文件类型。在对上传的文件进行判断时,先判断文件类型是否在黑名单中,如果在,则拒绝上传;否则再判断文件类型是否在允许上传的类型列表中,如果不在,则同样拒绝上传;否则允许上传文件。 这种方法的优点是可以灵活地控制上传的文件类型,但其缺点是需要不断更新黑名单,否则可能会漏掉某些新出现的恶意文件类型。因此,建议使用白名单的方式实现上传文件类型过滤,只允许上传指定的安全文件类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值