csp内容安全策略了解

一,php.ini中httponly了解

概念

httpOnly 是一个常见的 Cookie 属性,用于增加对于跨站点脚本攻击(XSS)的防护。将 Cookie 的 httpOnly 属性设置为 true 会限制浏览器端 JavaScript 对该 Cookie 的访问,只允许在 HTTP 请求中自动发送 Cookie,而禁止通过 javaScript 来读取或修改该 Cookie。

大概设置成了只读

接下来进行我们的模拟小实验

准备工作

create cookie.php

<?php
    session start();
?>

create get_cookie.php

<?php
$content =$_GET["content"];
echo $content;
?>
尝试获取cookie

生成cookie(通过访问页面,打开session生成)

实验前记得清一下浏览器cookie

http://192.168.159.128/cookie.php

在页面访问获取cookie

实际上就是利用xss漏洞来实现

http://192.168.7.87/get_cookie.php?name=<script>alert(document.cookie)</script>
禁止js使用cookie
方法一

在php.ini配置文件中进行cookie只读设置的开启(有效范围:全局) 搜索session.cookie_httponly session.cookie httponly = On

方法二

在php代码顶部设置(有效范围:当前页面)

<?php
ini_set("session.cookie httponly",1);
php>

另外的防御方案就是对用户的输入进行各种校验,过程非常繁琐,还容易出错或者遗漏,有没有一种方法可以想 cors那样快捷方便地通过响应头的约束,就可以让浏览器执行安全检查,杜绝XSS漏洞呢?

接下来我们就可以来了解csp内容安全策略了。

二,csp内容安全策略

什么是

csp是一种安全策略,其原理是当浏览器请求某一个网站时,告诉该浏览器申明文件可以执行,什么不可以执行。CSP的引入会使得我们的引入扩展程序更加安全,并且可以由开发者指定可以加载扩展程序的类型,避免恶意的脚本在浏览器中执行,造成信息泄露问题。(xss主要的防御手段)

主要可以理解成白名单,CSP 大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本,除非还控制了一台列入了白名单的可信主机。

尝试使用
准备工作

csp.php

<?php
    header("Content-Security-Policy: script-src 'self'");
    echo "用户信息<br>";
    include "./fish/dbUtil.php";
    $id=$_GET['id'];
    $sql = "select  * from user where id=$id;";  
    $res = queryRow($sql);
    print_r($res);    
?>

dbUtil.php

  /**
         * 通用的数据库操作文件
         */
        //1.链接数据库
        function getConnection(){
            $conn = mysqli_connect("192.168.159.128","root","123456","xss");
            mysqli_query($conn,"set names utf8");
            return $conn;
        }
        //2.增删改
        function update($sql){
            //链接数据库
            $conn = getConnection();
            $res = mysqli_query($conn,$sql);
            return $res;
        }
        //3.查询单行数据
        function queryRow($sql){
            $conn = getConnection();
            $res = mysqli_query($conn,$sql);
            $arr = mysqli_fetch_row($res);
            return $arr;
        }
        //4.查询多行数据
        function queryAll($sql){
            $conn = getConnection();
            $res = mysqli_query($conn,$sql);
            $arr = mysqli_fetch_all($res);
            return $arr;
        }
    ?>
模拟xss漏洞(存储型)

image-20240614173854790

image-20240614174106604

常用的CSP指令(引用其它博主收集的,很详细)
  • default-src, “self” “cdn.guangzhul.com”, 默认加载策略

  • script-src, “self” “js.guangzhul.com” ,对javascript的加载策略

  • style-src, “self” “css.guangzhul.com” ,对样式的加载策略

  • img-src, “self” “img.guangzhul.com” ,对图片的加载策略

  • content-src ,“self” ,对ajax,websocket请求的加载策略。不允许的情况下浏览器会模拟一个状态为400的相应

  • font-src ,“font.cdn.guangzhul.com” ,针对webFont的加载策略

  • object-src, “self” ,指针或标签引入flash等插件的加载策略

  • media-src, media.cdn.guangzhul.com ,针对媒体引入的HTML多媒体的加载策略

  • frame-src ,“self” ,针对frame的加载策略

  • report-uri, /report-uri ,告诉浏览器如果请求的资源不被策略允许时,往哪个地址提交日志信息。 特别的:如果想让浏览器只汇报日志,不阻止任何内容,可以改用 Content-Security-Policy-Report-Only 头

其他的CSP指令
  • sandbox 设置沙盒环境

  • child-src 主要防御 frame,iframe

  • form-action 主要防御 form

  • frame-ancestors 主要防御 frame,iframe,object,embed,applet

  • plugin-types 主要防御 object,embed,applet

CSP指令值

以下按照 指令值 指令值示例(指令、指令值)进行编排:

  • * img-src * 允许任何内容

  • “none” img-src “none” 不允许任何内容

  • “self” img-src “self” 允许来自相同的来源的内容(相同的协议,域名和端口)

  • data: img-src data: 允许data协议(如base64编码的图片)

  • www.guangzhul.com img-src img.guangzhul.com 允许加载指定域名下的资源

  • *.guangzhulcom img-src: *.guangzhul.com 允许加载guangzhul.com任何子域下面的资源

  • “unsafe-inline” script-src “unsafe-inline” 允许加载inline的资源 例如常见的 style 属性,onclick,inline js 和 inline css 等等

  • “unsafe-eval” script-src “unsafe-eval” 允许加载动态js代码,例如eval()

  • 'nonce'仅限一次的字符串

参考文章

https://blog.csdn.net/weixin_47450807/article/details/123224654

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值