页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

本页面罗列了常见的安全漏洞相关处理方案本页面罗列了常见的安全漏洞相关处理方案,指导用户通过系统化配置、环境优化及最佳实践,提升Smartbi系统的整体安全性,降低安全风险。
适用场景:新环境部署、版本升级、安全审计前的加固操作。

序号漏洞详情解决方案
1环境配置加固
操作系统层

1、操作系统层:

关闭不必要的网络端口和服务(如默认关闭3306、8080等非必要端口),如:

①关闭不必要的网络端口和服务(如默认关闭3306、8080等非必要端口),如:Smartbi 组件默认端口修改汇总 和 如何更改应用服务器默认端口

启用操作系统防火墙规则,仅放行Smartbi服务必需的端口;

②启用操作系统防火墙规则,仅放行Smartbi服务必需的端口;
③设置高强度密码策略(如:密码长度≥12位,包含大小写字母、数字及特殊字符)

设置高强度密码策略(如:密码长度≥12位,包含大小写字母、数字及特殊字符)

2、数据库层:

数据库层

①禁用默认账号(如sa、root),重命名管理员账号;

禁用默认账号(如sa、root),重命名管理员账号;

3、中间件层(如Tomcat、Nginx):

使用参数化查询,防止SQL注入攻击;

①禁用不安全的HTTP方法(如PUT、DELETE),Tomcat示例可参考列表第28项配置,也可找相关中间件厂商获取配置方案。

定期清理历史备份,确保数据加密存储。

②配置HTTPS协议,禁用HTTP明文传输,参考示例:Tomcat配置HTTPS访问

中间件层(如Tomcat、Nginx)因smartbi的系统功能众多,建议做好内外网隔离,避免在密码泄露的情况下,用户非法访问,并进行接口调用,内外网隔离设置可参考wiki文档:

③关闭目录浏览功能,防止敏感文件泄露。

  • 禁用不安全的HTTP方法(如PUT、DELETE),Tomcat示例可参考列表第28项配置,也可找相关中间件厂商获取配置方案。
  • 配置HTTPS协议,禁用HTTP明文传输;Tomcat配置HTTPS访问
  • 关闭目录浏览功能,防止敏感文件泄露。
  • 2外网环境

    4、smartbi应用:
    ① 每月检查Smartbi官方补丁库,及时更新安全版本;https://www.smartbi.com.cn/patchinfo
    ② 按本文档进行安全加固,降低安全风险

    2外网环境安全加固

    1、内外网隔离

    因smartbi的系统功能众多,建议做好内外网隔离,实施最小权限原则,为用户分配仅满足业务需求的访问权限,避免在密码泄露的情况下,被非法访问并进行接口非法调用,内外网隔离设置可参考wiki文档:内外网隔离最小化  

    该扩展包支持V8-V11,jdk 要1.7及以上,所有发包版本的war包需要在2023年9月22号以后的才生效、V87在2023年11月9号以后

    2、关闭DDL/DML语句执行权限

    在系统选项-高级设置中,添加 SQLDDLDMLAUTHORITY_CONTROL_SWITCH=true 配置项,关闭在SQL 查询中执行 DDL/DML 语句的权限,具体可参考wiki文档:原生SQL查询是否支持update、delete等语句

    该配置支持版本:V95及以上版本支持,2020年11月17号之后的包

    3、过滤 [其它类型] 参数中的特殊字符

    代码块
    [其他类型]是一种特殊的参数类型,区别于常规的数据库数据类型,主要用于将参数值动态拼接到SQL语句中。
    例如,它可以将参数值拼接为SQL查询的SELECT子句部分。
    
    V97及以上版本我们可以通过在 [系统选项-高级设置] 添加 SQL_ILLEGAL_CHARTS 设置项来自定义一些需要过滤的特殊字符,预防SQL注入。
    
    # sql 非法字符,value值就是想要限制的特殊字符,多个使用 | 来分割
    SQL_ILLEGAL_CHARTS='| and | or |--|updatexml|extractvalue
     
    # 设置发现存在非法字符时报错的提示内容,如果不设置则默认内容为“使用了禁用的特殊关键字,如有特殊需要,请联系管理员。”
    SQL_ILLEGAL_CHARTS_TIP=存在注入攻击的可能,如有特殊需要,请联系管理员

    该配置支持版本:

    ① V97 及以上版本: 2023 年 6 月 7 号之后的包 

    ② V95 :2024 年 1 月 10 号之后的包

    4、数据挖掘安全配置

    配置为只允许内部服务器的 IP 访问数据挖掘相关的服务,不开放外网访问。

    • 2024-02-07 之后的版本,可以通过系统功能【绑定引擎】来配置,参考 wiki 文档:绑定引擎

    • 2024-02-07 之前的版本,可以通过配置访问白名单来控制,参考 wiki 文档配置:访问ip限制

    5、导出引擎配置白名单

    配置为只允许内部服务器的 IP 访问Smartbi导出引擎相关的服务,不开放外网访问。参考wiki文档配置:导出引擎白名单设置

    3index.jsp登录爆破
    对于登录爆破,我们对外一直是提供登录验证码功能扩展包解决,

    对于登录爆破,建议是部署登录验证码功能扩展包或者账号锁定解决,用户可配置相关扩展包解决。

    【V11版本】
    (1)登录页添加验证码:登录页添加验证码

    (2)账号锁定: https://

    history

    my.

    wiki.smartbi

    Smartbi.com.cn/addons/

    pages

    leescore/goods/

    viewpage

    details.

    action

    html?

    pageId

    gid=

    52627212,用户可配置相关扩展包解决。

    142

    V11版本:登录页添加验证码

    【V10版本】

    V10版本:

    (1)登录页添加验证码:登录页添加验证码 

    V9版本:

    (2)账号锁定: https://

    history

    my.

    wiki.smartbi

    Smartbi.com.cn/

    pages/viewpage.action?pageId=52627212V6到V8版本https://history.wiki.smartbi.com.cn/pages/viewpage.action?pageId=35750958

    addons/leescore/goods/details.html?gid=142

    【V9版本】

    (1)登录页添加验证码:密码验证扩展包VerificationCode 

    (2)账号锁定:如有需要扩展包前联系官方支持进一步获取方案

    V6到V8版本

    (1)登录页添加验证码:PC端登录界面增加验证码 

    (2)账号锁定:如有需要扩展包前联系官方支持进一步获取方案

    4

    config.jsp/monitor/defender

    登录爆破

    通过smartbi.properties 文件新增配置项来限定ip访问,建议只对服务所在机器开放
    配置方法:

    1、进入到smartbi部署目录找到 smartbi.properties 文件,在文件中新增如下配置项目

    设置config.jsp可以使用英文逗号分隔设置多个IP属性,例如 smartbi.allowedConfigIps=10.21.31.71,127.0.0.1

    设置monitor.jsp可以使用英文逗号分隔设置多个IP属性,例如 smartbi.allowedMonitorIps=10.10.23.11,10.10.201.1-10.10.201.254,10.10.202.0/24

    设置defender.jsp可以使用英文逗号分隔设置多个IP属性,例如 smartbi.allowedDefenderConfigIps=10.10.23.11,10.10.201.1-10.10.201.254,10.10.202.0/24

    具体可参考wiki文档:安全补丁 中的【说明事项】章节

    5

    限制config/chooser.jsp文件访问路径

    前提:产品的补丁工具包和安全补丁文件为最新版本(2020-10-14及之后的日期)。

     系统运维>系统选项>高级设置 中,设置JSP_CHOOSER_ROOT_PATH设置项可限制config/chooser.jsp页面文件访问路径,值为限制用户可选的最大可选择根目录。

    具体可参考wiki文档:

    V9及以上版本:安全补丁 中的【说明事项】章节

    V6到V8版本: https://history.wiki.smartbi.com.cn/pages/viewpage.action?pageId=51939741 中的【说明事项】章节

    6
    弱口令用户配置密码过于简单,可以通过配置正在表达式限制用户输入密码过于简单,具体可参考Wiki文档:https://wiki.smartbi.com.cn/pages/viewpage.action?pageId=76679302
    设置账号校验规则:^$|[a-zA-Z0-9]{6,32}
    设置密码校验规则:^(?![^a-zA-Z]+$)(?!\D+$)[a-zA-Z0-9]{8,}$

    各个部署组件弱密码检测

    安全部署检查:安装部署_安全维度Checklist
    7查看smartbi版本信息版本信息开放主要是用于日常问题分析,因为我们前端js是存在会话缓存,若无法确认版本信息,会导致问题分析比较难。再者我们过于经过第三方安全机构检测,相关检测报告也未对此类做安全漏洞判断。用户可以删除相关的txt文件,对产品功能使用不影响。【 war包路径:\smartbi\vision\packageinfo.txt 
    8目录遍历  

    于2020-10-14已发布相关安全补丁,该问题可通过安装安全补丁后,配置限制config页面文件访问路径解决:

    V9及以上版本:安全补丁 中的【说明事项】章节中的【限制config页面文件访问路径

    V6到V8版本: https://history.wiki.smartbi.com.cn/pages/viewpage.action?pageId=51939741 中的【说明事项】章节中的【限制config页面文件访问路径

    9信息泄露

    为了监控用的页面,超级管理员才有的权限。建议用户配置IP限制,限制非允许IP访问。具体设置如下:

    通过smartbi.properties 文件新增配置项来限定ip访问,建议只对服务所在机器开放
    配置方法:

    进入到smartbi部署目录找到 smartbi.properties 文件,在文件中新增设置monitor.jsp限制IP访问,可以使用英文逗号分隔设置多个IP属性,

    例如 smartbi.allowedMonitorIps=10.10.23.11,10.10.201.1-10.10.201.254,10.10.202.0/24

    具体可参考wiki文档:安全补丁 中的【说明事项】章节

    10接口泄露(直接访问wsdl无需401)相关接口信息可参考Wiki文档进行屏蔽:https://wiki.smartbi.com.cn/pages/viewpage.action?pageId=89033146 ,产品未直接限制主要是做成产品,很有项目需要调用相关接口进行二开,因此我们保留相关访问。
    11session劫持+重置用户密码(无需原密码)
    session劫持的前提是访问到,

    session劫持的前提是访问到:https://127.0.0.1/vision/monitor/listsessions.jsp

    。 通过2.3的解决方案,可限制IP访问,非白名单IP无法访问到相关页面,https://wiki.smartbi.com.cn/pages/viewpage.action?pageId=50692623

     

    可通过限制IP访问,非白名单IP无法访问到相关页面,配置方法:

    进入到smartbi部署目录找到 smartbi.properties 文件,在文件中新增设置monitor.jsp限制IP访问,可以使用英文逗号分隔设置多个IP属性,

    例如 smartbi.allowedMonitorIps=10.10.23.11,10.10.201.1-10.10.201.254,10.10.202.0/24

    具体可参考此文档中【说明事项】章节中的【限制config页面文件访问路径】:安全补丁

    12heapdump缓存抓取密码
    如session劫持,另外于2022
    如session劫持,另外于2022-06-
    17对于相关密码已采取asc加密。
    17,V62及以上版本之后的包对于相关密码已采取AES加密
    13Tomcat存在登陆页面非必要保留Tomcat自带的目录的情况下,建议删除webapps下Tomcat自带的docs、examples、ROOT目录
    14会话超时

    配置会话超时扩展包,产品默认实现不超时功能,若项目安全性要求高,建议配置会话超时,当用户对系统长时间未操作自动超时

    V11版本:用户管理-会话管理

    V11以下版本,具体可参考Wiki文档:smartbi会话超时机制

    15不安全的http协议配置https可参考:Tomcat配置HTTPS访问
    16缺少X-Frame-Options标头属性可以部署webSecurityExt.ext扩展包进行设置请求头 安全加固扩展包webSecurityExt
    17config.jsp页面内的密码项要勾选【加密保存】
    保障密码安全

    保障密码安全,为进一步提升安全也可以更换为国密算法:

    V9及以上版本:https://my.smartbi.com.cn/addons/leescore/goods/details.html?gid=167

    其他版本可联系官方技术支持进一步获取方案。

    18同一个账号在不同的地方登录使用

    锁定账号扩展包LoginLock,不允许同一个账号在不同的地方登录使用,如果存在同时使用同一账号的情况,之前登录的账号在访问下一个请求的自动跳转到登录界面。

    V11版本:用户管理-用户登录管理(双因素验证、登录锁定)

    V11以下版本可联系官方支持进一步沟通获取方案。

    19报错页面泄漏信息

    V97

    及以上版本的角色里有设置错误信息的操作权限 ,如V11的操作权限设置可查看: 

    及以上版本的操作权限中有相应的操作权限控制,如V11的操作权限设置可查看: 操作权限列表

    V95 及以下版本的报错信息权限控制使用扩展包SuccinctErrorMessage.ext,需联系官方支持获取。

    20会话固定
    用户登录前与登录后的JSESSIONID是一样的,需要用修复会话固定漏洞扩展包SessionFixationHandler,
    用户登录前与登录后的JSESSIONID是一样的,需要用修复会话固定漏洞扩展包SessionFixationHandler:防止会话固定攻击扩展包SessionFixationHandler
    21Cookie的HttpOnly、secure 安全属性未启用到Tomcat根目录下的conf/web.xml中添加如下配置
    <session-config>
        <session-timeout>30</session-timeout>
     <cookie-config>
            <http-only>true</http-only>
            <secure>true</secure>
        </cookie-config>
    </session-config>
    注意:设置secure需要开启https
    22ip伪造、host头攻击、缺少X-Frame-Options响应头、cookie缺少httponly,secure,samesite问题
    配置nginx,如:

    配置nginx,如:

    代码块
    collapsetrue
    upstream smartbi_tomcat{

    
        ip_hash;

    
        server 10.253.88.111:8080 weight=1;

    
    }

    
    server {

    
        listen       80;

    
        server_name  10.253.88.111;

    
        if ($host !~* ^10.253.88.111|127.0.0.1$){

    
            return 403;

    
        }

    
       

    
        # 将http请求转发到https

    
        #if ($scheme = http) {

    
        #    return 301 https://$host$request_uri;

    
        #}

    
       

    
        # https 证书配置

    
        #ssl_certificate          <证书所在路径>/<证书名称>.crt;

    
        #ssl_certificate_key      <证书所在路径>/<证书名称>.key;

    
       

    
        location / {

    
            # 注意,这里不要使用集群,直接转发到 Tomcat 服务即可

    
            proxy_pass        http://10.253.88.111:8080;

    
    
            add_header 'Access-Control-Allow-Credentials' 'true';

    
            add_header X-Frame-Options SAMEORIGIN;

    
    
            proxy_set_header Cookie $http_cookie;

    
            proxy_redirect off;

    
            proxy_set_header Host $http_host;

    
            proxy_set_header X-Real-IP $remote_addr;

    
            proxy_set_header X-Forwarded-For $remote_addr;

    
            # 需要https 的支持

    
            #proxy_cookie_path ~^/(.+)$ "/$1; HttpOnly; secure; SameSite=none";

    
           

    
            client_max_body_size 100m;

    
            client_body_buffer_size 1024k;

    
            proxy_connect_timeout 300;

    
            proxy_send_timeout 300;

    
            proxy_read_timeout 300;

    
            proxy_buffer_size 4k;

    
            proxy_buffers 4 32k;

    
            proxy_busy_buffers_size 64k;

    
            proxy_temp_file_write_size 64k;

    
       }

    
    }


    23Tomcat服务器版本号泄露

     进入tomcat的配置目录下(%tomcatHome%\conf) 在 server.

    xml文件中的Host节点添加如下配置

    xml文件中的Host节点添加如下配置:

    代码块
    <Valve className="org.apache.catalina.valves.ErrorReportValve"
     showReport
     showReport="false"
     showServerInfo
     showServerInfo="false" />


    配置说明参考:安全检测-Tomcat默认页面泄露

    24

    HSTS开启

    hsts开启的前提条件是开启了https,(准备好域名、https证书)
    Nginx配置:
    1、保证Nginx的配置已强制http转https
    2、进入到nginx目录下的conf/nginx.conf文件中的server location

    中加入以下配置

    中加入以下配置:

    代码块
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;


    Tomcat配置(需要 8.0.23 版本及之后的版本才支持):
    1、保证Tomcat的配置已强制http转https,可参考 https://smartbi.feishu.cn/docx/A3vadSTbUo5NdgxPmUNcGsd7nzg#H0GCdu8Mgo46Kqx6W7PcL4kkn7g
    1、保证Tomcat的配置已强制http转https,可参考:Tomcat配置HTTP强制转HTTPS&HTTP重定向到 HTTPS
    2、进入tomcat的配置目录下(%tomcatHome%\conf)修改web.
    xml文件中添加以下配置。
    xml文件中添加以下配置:
    代码块
    collapsetrue
    <filter>
            <filter-name>httpHeaderSecurity</filter-name>
            <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
            <async-supported>true</async-supported>
            <init-param>
                <param-name>hstsEnabled</param-name>
                <param-value>true</param-value>
            </init-param>
            <init-param>
                <param-name>hstsMaxAgeSeconds</param-name>
                <!--这里设置的是有效期,生产环境测试时建议不要设置太大,测试没问题后再逐步提高这个值。如:1分钟、5分钟、10分钟、30分钟、60分钟、3个钟、6个钟、12个钟、18个钟、24个钟、半年、一年-->
                <!--单位是秒-->
                <!--一年是 31536000 -->
                <param-value>60</param-value>
            </init-param>
            <init-param>
                <param-name>hstsIncludeSubDomains</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter>
        
           <filter-mapping>
            <filter-name>httpHeaderSecurity</filter-name>
            <url-pattern>/*</url-pattern>
            <dispatcher>REQUEST</dispatcher>
        </filter-mapping> 

    25IP伪造

    需要到 系统运维/系统选项/高级设置

    中新增如下配置

    中新增如下配置:

    # 是否开启防止IP伪造,如果有前置代理的情况下不能开启。
    HAS_ENABLED_IP_PORGERY=true

    支持版本:2023-10-26之后的V95及以上版本

    对于V95以下版本,需要在代理或者中间件层配置。

    26

    跨站脚本攻击、csrf跨站请求伪造

    通过加载安全扩展包来配置相关配置项防止  
    单机配置方式:
    1、下载 安全加固扩展包webSecurityExt
    2、找到安全扩展包中的 /META-INF/webSecurity.properties 文件,修改文件中的默认值。
    将strictLimit的默认false修改为true
    safeReferer默认为空(即 safeReferer= 表示当前机器放行)。如果有其它应用需要集成Smartbi的需要将其修改为对应机器的请求域名或ip。注意:这里只配置Host,可以是域名或ip,不用配置到具体地址的,如:http://10.11.27.46:8095/smartbi 只需要配置 http://10.11.27.46:8095 即可。

    或者配置nginx:

    代码块
    valid_referers none blocked 172.16.20.216 localhost; if ($invalid_referer) { return 403; }

    27

    存在缓慢的HTTP拒绝服务攻击

    通过配置中间件或nginx的连接超时时间
    第一种方式:

    tomcat配置方式:
    进入到Tomcat目录下的conf/server.xml文件中修改如下配置
    将 connectionTimeout 值修改为 8000

    代码块
    connectionTimeout="8000"


    第二种方式:

    nginx配置方式:
    1、进入到nginx目录下的conf/nginx.

    conf文件中的http新增如下相关配置

    conf文件中的http新增如下相关配置:

    代码块
    collapsetrue
    http {

    
    #指定每一个 TCP 链接最多能够保持多长时间

    
    keepalive_timeout 60;

    
    server {

    
    #服务端向客户端传输数据的超时时间

    
    send_timeout 60s;

    
    #请求头分配一个缓冲区

    
    client_body_buffer_size 16k;

    
    #指定客户端与服务端建立连接后发送 request body 的超时时间

    
    client_body_timeout 50s;

    
    #客户端向服务端发送一个完整的 request header 的超时时间

    
    client_header_timeout 10s;

    
    location / {

    
    
             }

    
         }

    
    }

    28

    启用了没必要的 http 请求类型

    通过配置中间件或代理来禁用相关http方法。
    tomcat配置方式:
    1、进入tomcat的配置目录下(%tomcatHome%\conf)修改web.xml文件中的 web-app 节点下 添加以下配置。

    代码块
    collapsetrue
    <security-constraint>

    
    <web-resource-collection>

    
    <web-resource-name>filter-http-method</web-resource-name>

    
    <url-pattern>/*</url-pattern>

    
    <http-method>PUT</http-method>

    
    <http-method>DELETE</http-method>

    
    <http-method>OPTIONS</http-method>

    
    <http-method>HEAD</http-method>

    
    </web-resource-collection>

    
    <auth-constraint></auth-constraint>

    
    </security-constraint>

    
    <login-config>

    
    <auth-method>BASIC</auth-method>

    
    </login-config>

    这里禁用了PUT、DELETE、OPTIONS、HEAD,如果还需要禁用其它的则新增一行 <http-method>其它</http-method> 即可


    nginx配置方式:
    1、进入到nginx目录下的conf/nginx.conf文件中的server 或 location 中加入以下配置。

    代码块
    if ($request_method ~ ^(PUT|DELETE|OPTIONS|HEAD)$) { return 403; }

    责任声明

    • 本手册提供通用安全加固建议,最终实施效果需结合客户具体环境;
    • 对于第三方组件、定制开发模块的安全问题,建议客户与Smartbi技术支持团队联合验证。