Apache CSP头配置错误

网站漏洞检测
PHPstudy环境用的Apache
漏洞名称:Content-Security-Policy头配置错误
已经在Apache的配置文件中添加了以下语句:

Header set Content-Secure-Policy "default-src 'self';script-src 'self' 'unsafe-inline';style-src 'self' 'unsafe-inline';"

index.html界面的 head 中也添加了

<meta http-equiv="Content-Security-Policy" content=" default-src 'self';script-src 'self' 'unsafe-inline';style-src 'self' 'unsafe-inline';">

在HTML中添加后,确定页面中起作用,我的页面有内联的style和script,如果都写self,则不显示。

其他的头配置语句都起作用了,但就是这个不行

img

img

img

以下配置都是网上找的,都起作用了

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header set X-XSS-Protection "1; mode=block"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin"
Header always set Permissions-Policy "geolocation=(),midi=(),sync-xhr=(),microphone=(),camera=(),magnetometer=(),gyroscope=(),fullscreen=(self),payment=()"
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 看下这篇博客,也许你就懂了,链接:HTTP Content-Security-Policy缺失,快速解决
  • 除此之外, 这篇博客: php:一次完整的HTTP请求过程笔记中的 Apache 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    Apache HTTP Server(简称Apache)是 Apache 软件基金会的一个开放源代码的网页服务器软件,可以在大多数电脑操作系统中运行,由于其跨平台和安全性被广泛使
    用,是最流行的Web服务器软件之一。它快速、可靠并且可通过简单的API扩充,将 PHP/Perl/Python 等解释器编译到服务器中。

    Apache 常用命令

    • httpd # 启动 Apache
      httpd -h # 显示帮助
      httpd -v # 显示版本信息
      httpd -V # 显示版本,编译器版本和配置参数
      httpd -t # 检查配置文件语法错误
      httpd -l # 显示编译模块
      httpd -L # 显示配置指令说明
      httpd -f </path/to/config> # 指定配置文件
      httpd -S # 显示配置文件中的设定
      Apache 常用的配置与模块

    Options(配置选项)

    • Indexes:目录浏览,是否允许在目录下没有 index.html,index.php 的时候显示目录。
      Multiviews:文件匹配,服务器执行一个隐含的文件名模式匹配,并在其结果中选择。
      FollowSymLinks:符号链接,是否允许通过符号链接跨越 DocumentRoot 访问其他目录。
      AllowOverride(是否允许根目录下的 .htaccess 文件起到 URL rewrite 的作用)
      All
      None
      LoadModule(加载模块)
      Listen(Apache 默认监听端口)
      ServerRoot:Apache 安装的基础目录
      DocumentRoot:Apache 缺省文件根目录
      DirectoryIndex:网站默认首页文件
      LogLevel:日志级别设置
      ErrorLog:错误日志存放路径
      CustomLog:访问日志存放路径
      VirutalHost(虚拟主机与配置参数)
      ServerName:虚拟域名
      ServerAlias:虚拟域名的别名
      ServerAdmin:服务器管理员邮箱
      DocumentRoot:项目代码根目录
      LogLevel:日志级别设置
      ErrorLog:错误日志存放路径
      CustomLog:访问日志存放路径
      MPM(工作模式/多处理模块)
      Prefork
      StartServers:服务器启动时默认开启的进程数
      MinSpareServers:最小的空闲进程数
      MaxSpareServers:最大的空闲进程数
      ServerLimit:在Apache的生命周期内,限制MaxClients的最大值
      MaxClients:最大的并发请求数,最大值不能超过 ServerLimit 设置的值
      MaxRequestsPerChild:一个进程可以处理的最多的请求数(进程复用),如请求超过该设置则杀死进程,0表示永不过期。
      Worker
      StartServers: 服务器启动时默认开启的进程数
      MaxClients: 最大的并发请求数
      MinSpareThreads: 最小的线程空闲数
      MaxSpareThreads: 最大的线程空闲数
      ThreadsPerChild: 每一个进程可以产生的线程数
      MaxRequestsPerChild: 一个线程可以处理的最多的请求数(线程复用),如请求超过该设置则杀死线程,0表示永不过期。
      Event
      Order, Deny, Allow(认证,授权与访问控制)
      HostnameLookups off(避免 DNS 查询)
      Timeout(请求超时)
      Include(文件包含)
      Proxy、mod_proxy(代理)
      Cache Guide(缓存)
      Apache 配置示例

    Laravel .htaccess 文件的 URL rewrite 示例配置

    <IfModule mod_rewrite.c>
        <IfModule mod_negotiation.c>
            Options -MultiViews
        </IfModule>
    
        RewriteEngine On
    
        # Redirect Trailing Slashes If Not A Folder...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)/$ /$1 [L,R=301]
    
        # Handle Front Controller...
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.php [L]
    </IfModule>
    配置虚拟主机的 httpd-vhosts.conf 文件的示例配置
    
    <VirtualHost *:80>
        ServerName cowcat.app
        ServerAdmin cowcat.app
        ServerAlias www.cowcat.app
        DocumentRoot "/Users/LuisEdware/Code/WorkSpace/CowCat/public"
        ErrorLog "/Users/LuisEdware/Code/Errors/cowcat.app-error_log"
        CustomLog "/Users/LuisEdware/Code/Errors/cowcat.app-access_log" common
    </VirtualHost>
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^