用PHP实现CSPRepor报告预警信息存储和动态显示。

news2024/11/23 7:49:02

一、了解CSP内容安全策略

       CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。

作用就是:大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本,除非还控制了一台列入了白名单的可信主机。有两种方法可以启用CSP

1、方法一:是通过 HTTP 响应头信息的Content-Security-Policy的字段

Content-Security-Policy: script-src 'self; object-src 'none'; style-src cdn.example.orgthird-party.org;child-src https:

在PHP中直接使用 header() 函数定义响应头内容即可。

2、方法二:通过网页的meta标签

<meta http-equiv="Content-Security-Policy" content="script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; child-src https:">

一旦启用后,不符合的CSP外部资源就会被组织加载

二、实验场景

1、需要两台web服务器来实现跨站的效果。

构建第一个界面,是用于发送报告的也就是检测的界面,也是我们要检测的页面 myweb.php(114.165)

<?php 
    header("Content-Security-Policy: script-src 'self' ; report-uri http://192.168.114.96/web_repot/report.php")
#script-src:定义针对所有类型(js/image/css/font/ajax/iframe/多媒体等)资源的默认加载策略。 7主机
#script-src 'self' http://www.woniunote.com,对于脚本: 只信任当前域名自己和http://www.woniunote.com
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>受保护页面</title>
</head>
<body onload='localtion.href="http://192.168.114.96/a.js"'>
<p>我可以跳转到js</p>
</body>
</html>
  1. 当访问这个页面的时候,会自动引用一个 a.js 的外部文件这个a.js也是部署在114.96检测服务器上。
  2. 请求头会发现页面在访问外部文件,通过这端代码来向我们的114.96检测服务器发送报错信息。report-uri http://192.168.114.96/web_repot/report.php"

2、在检测web服务器上需要个文件

  • report.php    #用来接受检测页面发送过来的请求,并存进数据库
  • db.php   #数据库语句代码
  • show.php   #显示界面,动态读取存储信息,并显示在界面中

3、脚本代码

  • db.php 
    <?php 
    //DML:插入
    function DML($mysql,$ip='127.0.0.1',$mysql_uname='root',$passwd='',$databas='report',$port=3306){
        $con=mysqli_connect($ip,$mysql_uname,$passwd,$databas,$port); //建立链接
        mysqli_query($con, "set names utf8");   //中文乱码转意
        $res=mysqli_query($con,$mysql);
        if($res){
            mysqli_commit($con);
            mysqli_close($con);
            return 1;    
        }else{
            mysqli_close($con);
            return 0;
        }
    }
    #查询
    function DQL($mysql,$ip='127.0.0.1',$mysql_uname='root',$passwd='',$databas='report',$port=3306){
        $con=mysqli_connect($ip,$mysql_uname,$passwd,$databas,$port); //建立链接
        mysqli_query($con, "set names utf8");   //中文乱码转意
        $res = mysqli_query($con,$mysql);
        $rows = mysqli_fetch_all($res,MYSQLI_ASSOC);
        return $rows;
    }
    
    $sql="select * from csp_report order by id;";
    $res=DQL($sql);
    echo json_encode($res);
    
    
    ?>

  • show.php
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <!-- <meta http-equiv="refresh" content="2"> -->
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script type="text/javascript" src="/jquery-3.4.1.min.js"></script>
        <title>显示界面</title>
    </head>
    <style>
        table{
            border: 3px solid rgb(0, 0, 0);
        }
        td{
            width: 100px;
            border: 3px solid rgb(0, 0, 0);
        }
    </style>
    <script>
    function myrefresh()
    {
       window.location.reload();
    }
    setTimeout('myrefresh()',2000);
    function onLoad(){
        $.get('db.php',function(data){
            $('#out').empty(content)   //清空
            var dt=eval(data);
            var content=""
                content+="<tr>"
                content+="<td>ID</td>"
                content+="<td>时间</td>"
                content+="<td>blocked-uri</td>"
                content+="<td>document-uri</td>"
                content+="<td>original-policy</td>"
                content+="<td>source-file</td>"
                content+="<td>violated-directive</td>"
                content+="</tr>"
                content+="<tr>"
            dt.forEach(res=>{
                content+="<td>"+res['id']+"</td>"
                content+="<td>"+res['rt_time']+"</td>"
                content+="<td>"+res['bd_uri']+"</td>"
                content+="<td>"+res['dt_uri']+"</td>"
                content+="<td>"+res['ol_policy']+"</td>"
                content+="<td>"+res['se_file']+"</td>"
                content+="<td>"+res['vd_dir']+"</td>"
                content+="</tr>"
            });$('#out').append(content);
        })
    }
    </script>
    <body onload="onLoad()">
        <button onclick="onLoad()">点我</button></br>
        <table id="out">
        
        </table>
        </div>
    </body>
    </html>
    

  • report.php
    <?php
    #接收的脚本在虚拟机dvwa/cs/myweb.php
    include './db.php';
    $time = date('Y-m-d H:i:s');
    $data = file_get_contents('php://input'); // 利用伪协议取得请求内容
    $json = json_decode($data, true); // 生成关联数组
    $bluri=$json['csp-report']['blocked-uri'];
    $douri=$json['csp-report']['document-uri'];
    $origin=$json['csp-report']['original-policy'];
    $source=$json['csp-report']['source-file'];
    $viola=$json['csp-report']['violated-directive'];
    $sql="INSERT INTO csp_report (rt_time,bd_uri,dt_uri,ol_policy,se_file,vd_dir)value('$time','$bluri','$douri','$origin','$source','$viola')";
    DML($sql) ; #数据插入
    
    ?>
    
    

4、效果图,当检测的界面myweb.php访问了外部文件,这边就会检测到数据,并且实时更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/346894.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

透明和半透明效果

Alpha通道 透明度可以通过base map的alpha通道来控制。Alpha值低的话&#xff0c;mesh就变得更加透明&#xff0c;alpha值高的话&#xff0c;mesh的透明度会变低&#xff0c;变得能更加轻松地被看到。当alpha为0时&#xff0c;mesh就完全不可见了&#xff0c;alpha值在中间时&a…

kubernetes(k8s) 知识总结(第2期)

1. “控制器”思想 kube-controller-manager 是一系列控制器的集合&#xff0c;这些控制器被放在 Kubernetes 项目的 pkg/controller 目录&#xff0c;这些控制器都以独有的方式负责某种编排功能。它们都遵循一个通用的编排模式——控制循环。 以 Deployment 为例介绍它对控…

最最普通程序员,如何利用工资攒够彩礼,成为人生赢家

今天我们不讲如何提升你的专业技能去涨工资&#xff0c;不讲面试技巧如何跳槽涨工资&#xff0c;不讲如何干兼职赚人生第一桶金&#xff0c;就讲一个最最普通的程序员&#xff0c;如何在工作几年后&#xff0c;可以攒够彩礼钱&#xff0c;婚礼酒席钱&#xff0c;在自己人生大事…

什么是网络流量分析(NTA),有什么好用的NTA软件

分析网络的稳定性首先要监控其性能、设备功能、网络速度以及许多网络管理员忽略的另一个方面&#xff1a;网络流量。网络流量分析 &#xff08;NTA&#xff09; 通常是考虑最少的方面&#xff0c;但它会影响许多问题&#xff0c;例如性能下降和用户速度缓慢。忽视它可能会让位于…

SQL语句实现找到一行中数据最大值(greatest)/最小值(least);mysql行转列

今日我在刷题时遇到这样一个题&#xff0c;它提到了以下需求&#xff1a; 有一场节目表演&#xff0c;五名裁判会对节目提供1-10分的打分&#xff0c;节目最终得分为去掉一个最高分和一个最低分后的平均分。 存在以下一张表performence_detail&#xff0c;包含字段有performa…

Docker安装RocketMQ 4.8

1拉取4.8镜像 docker pull foxiswho/rocketmq:4.8.0拉取控制台镜像 docker pull styletang/rocketmq-console-ng2创建rocketmq使用的共有网络&#xff0c;便于相互访问 docker network create rocketmq_network3启动rmqnamesrv docker run -d --name rmqnamesrv --network …

电脑录屏怎样不录到外界声音?调整这一个开关,即可实现

​有很多小伙伴希望自己电脑录屏的时候&#xff0c;不要录制自己的声音&#xff0c;而是通过后期配音的方式完成视频创作。电脑录屏怎样不录到外界声音&#xff1f;其实只需要调整这一个开关&#xff0c;就能实现不录外界声音&#xff0c;一起来看看吧。 不录外界声音1&#xf…

什么是 Java 泛型?

本文首发自「慕课网」&#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注&#xff01; 作者| 慕课网精英讲师 ColorfulC 通过本篇文章你将了解到什么是泛型&#xff0c;为什么需要泛型&#xff0c;如何使用泛型&#xff0c;如何自定义泛型&…

记一次以小勃大,紧张刺激的渗透测试(2017年老文)

零、前言 有技术交流或渗透测试培训需求的朋友欢迎联系QQ/VX-547006660&#xff0c;需要代码审计、渗透测试、红蓝对抗网络安全相关业务可以看置顶博文 2000人网络安全交流群&#xff0c;欢迎大佬们来玩 群号820783253 一、起因 emmm&#xff0c;炎炎夏日到来&#xff0c;这…

libxlsxwriter数据验证

今天要分享的这个问题其实也属于excel的高级用法。我们想通过libxlsxwriter来实现一个能对用户的输入进行数据验证的表格功能。 内心os&#xff1a;小白最近是不是有点走火入魔了……我们真的会遇上这样的场景吗&#xff1a;需要通过代码生成一个表格&#xff0c;这个表格中还有…

智慧机场,或将成为航空领域数字孪生技术得完美应用

在《智慧民航建设路线图》文件中&#xff0c;民航局明确指出&#xff0c;智慧机场是实现智慧民航的四个核心抓手之一。这一战略性举措旨在推进数字化技术与航空产业的深度融合&#xff0c;为旅客提供更加智能化、便捷化、安全化的出行服务&#xff0c;进一步提升我国民航发展的…

IO流进阶

&#x1f3e1;个人主页 &#xff1a; 守夜人st &#x1f680;系列专栏&#xff1a;Java …持续更新中敬请关注… &#x1f649;博主简介&#xff1a;软件工程专业&#xff0c;在校学生&#xff0c;写博客是为了总结回顾一些所学知识点 目录IO流进阶缓冲流缓冲流概述字节缓冲流(…

【LeetCode】剑指 Offer(1)

目录 写在前面&#xff1a; 题目1&#xff1a;剑指 Offer 03. 数组中重复的数字 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目2&#xff1a;剑指 Offer 06. 从…

JavaEE初阶---TCP/IP协议

一:概述 本文是网络编程的理论基础,也是网络部分的重点和难点,在笔试,面试中,这部分内容也多有考察.二:详解 TCP/IP五层协议 应用层传输层网络层数据链路层物理层 2.1应用层 我们自己编写的代码,就是在应用层,这也是在实际开发中接触最多的层.应用层里有许多现成的协议 , 而在…

springboot(5)静态资源访问前缀+欢迎页+REST风格的传递参数

Springboot的访问规则是 先访问controller的请求&#xff0c;如果没有的话&#xff0c;我们在访问静态资源。 但是静态资源过多的情况下这样不好处理&#xff0c;所以我们可以加一个前缀&#xff0c;这样可以拦截掉非静态资源的请求&#xff0c;每次都可以准确快速无风险的访…

镀镍废水处理,企业污水处理,离子交换树脂在镀镍废水中的应用

传统沉淀法不能满足日益提的环保要求(如电镀表三镍含量要求0.1mg/l以下)。针对特定重金属离子的特点&#xff0c;利用螯合树脂的特种功能基团与重金属离子形成络合物的特性&#xff0c;实现重金属离子的回收利用及深度去除。 CH-90Na对除铜镍铅锌钴锰等具有特定的选择性&#x…

API的应用

API&#xff08;Application Programming Interface,应用程序编程接口&#xff09;是一些预先定义的函数&#xff0c;目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力&#xff0c;而又无需访问源码&#xff0c;或理解内部工作机制的细节 应用程序接口 想…

安卓|aar和jar打包引入流程演示

安卓|aar和jar打包引入流程演示aar和jar存在相关意义打包环境工具aar和jar|Module项目目录aar打包|引入总览步骤|aar配置打包创建java or kotlin类文件及资源|截图展示步骤|aar包引入jar打包|引入总览步骤|jar配置打包任务创建java类文件|截图展示步骤|jar包引入aar和jar运行在…

OpenTracing协议规范链接

一、官网链接 OpenTracing specificationhttps://opentracing.io/specification/不过目前OpenTracing项目已归档&#xff0c;不再维护。需要参考OpenTelemetry官网链接 Migrating from OpenTracing | OpenTelemetryBackward compatibility with OpenTracing has been a prior…

Promise 的理解

promise 是什么&#xff1f;promise 是JS 中进行异步编程的最新的解决方案从语法上来说&#xff1a;Promise 是一个构造函数从功能上来说&#xff1a;promise 对象时用来封装一个异步操作并可以获取其结果其三种状态&#xff0c;reasolve 、pendding、 rejectedPromise 的基本运…