精华内容
下载资源
问答
  • 服务器的操作系统版本、提供HTTP服务的软件版本等信息属于服务器安全信息,防止它们的信息泄露有助于防止黑客定向寻找特定操作系统或软件版本存在的漏洞,服务器也就多一重保障。nginx在每个Response写入了Server...

    服务器的操作系统版本、提供HTTP服务的软件版本等信息属于服务器安全信息,防止它们的信息泄露有助于防止黑客定向寻找特定操作系统或软件版本存在的漏洞,服务器也就多一重保障。nginx在每个Response中写入了Server这个Header,Server的值明确标示了服务器软件和版本信息(1.9.11版本后只写入了服务器软件名称,没有写入版本信息)。问题在于nginx不允许通过proxy_set_header指令修改修改server。nginx官方提供了一个可选的nginx模块来任意修改Header。CentOS系统提供的nginx、OpenSSL、GCC的版本较低。因此在这一次升级操作包含它们的升级操作。GCC的升级方法请参照:CentOS 7 升级GCC编译器。下文直接开始升级OpenSSL。工作目录是:/usr/local/nginx。所有的源代码的下载文件和解压文件都存放在这个工作目录下。

    一、升级OpenSSL

    CentOS7自带的SSL库的版本还是1.0.1e版本。OpenSSL的升级工作的难处不是OpenSSL如何编译,而是如何换掉正在被无数软件正在使用的旧版本的OpenSSL,这些软件包含你正在使用的OpenSSH。卸载?包含 正在使用的桌面gnome都得停止运行。如下图所示:
    这里写图片描述
    OpenSSL的源码下载地址是:https://www.openssl.org/source/。它的编译操作不难,总体思路是编译安装后用新的运行库文件换掉旧的库文件。操作过程如下:

    tar zxf openssl-1.0.2k.tar.gz
    cd openssl-1.0.2
    ./Configure linux-x86_64 shared zlib
    make
    make install
    mv /usr/bin/openssl /usr/bin/openssl.bak
    mv /usr/include/openssl /usr/include/openssl.bak
    ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
    ln -s /usr/local/openssl/include/openssl /usr/include/openssl
    ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
    ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
    echo “/usr/local/openssl/lib” >> /etc/ld.so.conf
    ldconfig -v
    ldd /usr/bin/openssl 

    运行openssl version或者openssl version -a,回显如下图所示则表示成功。
    这里写图片描述
    如果出现错误:openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory。请运行:

    ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
    ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

    二、准备nginx编译环境

    nginx功能强大,依赖项也比较多。寻找依赖项的方法是不断的运行configure命令,提示内容包含缺少的依赖项。我总结后把所有依赖项的安装放到一行命令中,命令行是:

    yum install libxml2-devel libxslt-devel gd-devel perl-ExtUtils-* GeoIP-data GeoIP-devel GeoIP-update gperftools gperftools-devel gperftools-libs

    安装成功的截图如下:
    这里写图片描述

    三、编译并安装nginx

    njs可以在nginx配置里启用javascript编写的服务器配置,cookie_flag可有效防止cookie劫持,Server Header的值的修改依赖more_header,它们都没有集成到nginx源代码,所以下载和附加的编译依赖项有三个。nginx当前最新版本是1.13.5,下面是下载和解压命令。

    wget http://nginx.org/download/nginx-1.13.5.tar.gz
    tar -xvf nginx-1.13.5.tar.gz
    wget https://github.com/nginx/njs/archive/master.zip
    unzip master.zip
    rm master.zip
    wget https://github.com/AirisX/nginx_cookie_flag_module/archive/master.zip
    unzip master.zip
    rm master.zip
    wget https://github.com/openresty/headers-more-nginx-module/archive/master.zip
    unzip master.zip
    rm master.zip

    接下来要做的是编译nginx。编译之前需要特别说明的是:nginx从1.9.11版本开始修改了–add-module静态编译附加模块的约定,这里所有附加的功能模块以dynamic的方法编译。如果nginx正在运行中,请运行sudo systemctl stop nginx使nginx处于停止运行的状态。cdnginx-1.13.5,运行命令:

    ./configure --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-google_perftools_module --with-debug --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E' --add-dynamic-module=/usr/local/nginx/njs-master/nginx --add-dynamic-module=/usr/local/nginx/nginx_cookie_flag_module-master --add-dynamic-module=/usr/local/nginx/headers-more-nginx-module-master
    make
    sudo make install

    编译成功截图如下:
    这里写图片描述
    验证一下编译和安装结果:
    这里写图片描述

    四、配置nginx

    编辑nginx配置文件,在http上面插入三行load_module指令:

    # load_module /usr/lib64/nginx/modules/ngx_stream_js_module.so;# 暂时用不上。
    load_module /usr/lib64/nginx/modules/ngx_http_js_module.so;
    load_module /usr/lib64/nginx/modules/ngx_http_cookie_flag_filter_module.so;
    load_module /usr/lib64/nginx/modules/ngx_http_headers_more_filter_module.so;

    这里的配置的作用是简单隐藏server名称,把Server的值改为。在http指令作用域内server指令作用域外加入一行指令:

    more_set_headers 'Server: -';

    保存,运行命令:

    sudo nginx -t
    sudo nginx -s reload

    验证一下结果,成功截图如下(Chrome Browser调试器):
    这里写图片描述

    展开全文
  • Web应用程序接收到用户请求,修改某条数据时,没有判断数据的所属人,或者在判断数据所属人时从用户提交的表单参数获取了用户信息,导致攻击者可以自行设置用户,修改不属于自己的数据 只要是权限验证不是使用...
  • Web安全之权限攻击

    千次阅读 2015-09-08 10:33:33
    权限攻击可以分为水平权限攻击和...导致攻击者可以自行修改userid修改不属于自己的数据。所有的更新语句操作,都可能产生这个漏洞。攻击我们来看看攻击案例,Web应用在修改用户个人信息时,从用户提交的表单获取use

    权限攻击可以分为水平权限攻击和垂直权限攻击。


    水平权限攻击

    水平权限攻击,也叫作访问控制攻击。Web应用程序接收到用户请求,修改某条数据时,没有判断数据的所属人,或者在判断数据所属人时从用户提交的表单参数中获取了userid。导致攻击者可以自行修改userid修改不属于自己的数据。所有的更新语句操作,都可能产生这个漏洞。

    攻击

    我们来看看攻击案例,Web应用在修改用户个人信息时,从用户提交的表单中获取userid,执行修改操作:

    <form action="/struts1/edituser.htm" method="post">
        <input name="userid" type="hidden" value="<%=userid%>">
           <table border="1">
            <tr>
            <td>username:</td>
            <td><%=rs.getString("name")%></td>
            </tr>
            <tr>
            <td>passwd:</td>
            <td> <input name="pass" value="<%=rs.getString("pass")%>"></td>
            </tr>
            <tr>
            <td>type:</td>
            <td><%=rs.getString("type")%></td>
            </tr>
            <tr>
            <td>realname:</td>
            <td><input name="realname" value="<%=rs.getString("realname")%>"></td>
            </tr>
            <tr>
            <td>email:</td>
            <td> <input name="email" value="<%=rs.getString("email")%>"></td>
            </tr>
            <tr>
            <td>tel:</td>
            <td> <input name="tel" value="<%=rs.getString("tel")%>"></td>
            </tr>
    </table>
    <html:submit/>
    </form>
    

    表单中,将用户的userid作为隐藏字段,提交给处理修改个人信息的应用。
    下面是修改个人信息的后台代码:

    int userid=Integer.valueOf( request.getParameter("userid"));
    String email=request.getParameter("email");
    String tel=request.getParameter("tel");
    String realname=request.getParameter("realname");
    String pass=request.getParameter("pass");
    JdbcConnection conn = null;
    try {
        conn = new JdbcConnection();
        Object[] params = new Object[5];
        params[0] = email;
        params[1] = tel;
        params[2] = realname;
        params[3] = pass;
        params[4] = userid;
        final String sql = "update user set email=?,tel=?,realname=?,pass=? where userid=?";
        conn.execUpdate(sql,params);
        conn.closeConn();
    

    这段代码从表单参数列表中获取userid,修改userid对应的用户数据。
    攻击者可以随意修改表单的userid:

    这里写图片描述
    修改userid后,提交表单,就可能修改了其他用户的数据。

    防御

    这种情况似乎很容易被忽略,包括我现在着手的一个项目也是才发现这样的一个问题。那么应该如何解决呢?其实也很容易。就是从用户的加密认证cookie中获取当前用户id,并且在执行的sql语句中加入当前用户id作为条件语句。由于cookie是加密的,所以攻击者无法修改加密信息。

    int userid=Integer.valueOf( GetUseridFromCookie(request));
    String email=request.getParameter("email");
    String tel=request.getParameter("tel");
    String realname=request.getParameter("realname");
    String pass=request.getParameter("pass");
    JdbcConnection conn = null;
    try {
        conn = new JdbcConnection();
        Object[] params = new Object[5];
        params[0] = email;
        params[1] = tel;
        params[2] = realname;
        params[3] = pass;
        params[4] = userid;
        final String sql = "update user set email=?,tel=?,realname=?,pass=? where userid=?";
        conn.execUpdate(sql,params);
        conn.closeConn();
    

    代码中通过GetUseridFromCookie方法,从加密的cookie中获取当前用户的id,并加入判断。


    垂直权限攻击

    垂直权限攻击又叫做权限提升攻击。其原理是由于Web应用没有做权限控制,或仅仅在菜单上做了权限控制,导致恶意用户只要猜测其他管理页面的URL,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。

    攻击

    我们来看看攻击案例,下面是一个仅仅做了菜单控制的代码:

    <tr><td><a href="/user.jsp">管理个人信息</a></td></tr>
    <%if (power.indexOf("administrators")>-1){%>
    <tr><td><a href="/userlist.jsp">管理所有用户</a></td></tr>
    <%}%>
    

    攻击者只需要猜中管理所有用户的页面url就可以越权操作了。

    防御

    这种攻击很容易防御,只需要在每个页面的加载之前进行权限验证即可。一个普通的权限系统,菜单是通过数据库中对应权限和角色来进行字符串拼接形成的,而不是静态的通过在页面上进行权限判断决定的。

    展开全文
  • 安全:道高一尺,强力保护您的爱站,定时收集反馈BUG和漏洞,定时的更新安全防护。让您的爱站每天接受体检,享受免费医疗的福利。 源码全部开源,支持自由修改发布。 全站完整无错,如无法架设可以去论坛看下...
  • 所谓RFID-SIM就是将普通SIM卡和RFID芯片做集成,使得一片SIM卡还具备RFID的功能,彻底改变传统SIM卡只能和手机进行通讯的缺点,使更换了RFID-SIM卡的手机可以随时和周围的设备进行交互,并且影响SIM卡的原有功能...
  •  String属于不可变类,在JAVA字符串一旦声明就可改变,如果尝试修改字符串的内容,将会重新实例化一个新的字符串对象,这也是为了安全性和效率。  由于字符串在程序之被大量使用,所以JAVA引入了一个字符串...

    反射消除String类对象的不可变特性

      String属于不可变类,在JAVA中字符串一旦声明就不可改变,如果尝试修改字符串的内容,将会重新实例化一个新的字符串对象,这也是为了安全性和效率。
      由于字符串在程序之中被大量使用,所以JAVA引入了一个字符串常量池,所有被声明的字符串都会保存在字符串常量池中,如果下次使用到同样的字符串,就会从常量池中获取。由于字符串可以用来表示很多重要的信息,例如用户名,密码,URL地址等,如果被引用的字符串可以随意修改,那么这些信息也会变得非常不安全。但是,反射让这一切发生了变化,字符串并不是一种基本数据类型,他的底层实际上是字符数组,虽然数组被定义为了final,但final关键字只在编译期有效果,运行期间就没有效果了,这个和泛型是一样的。那么,只要我们能够获取到这个字符数组,那么就可以修改字符串的内容了!String类提供有一个toCharArray()方法,但是这个方法实际上是复制这个字符串的字符数组:
      官方源代码:

    public char[] toCharArray() {
        // Cannot use Arrays.copyOf because of class initialization order issues
        char result[] = new char[value.length];
        System.arraycopy(value, 0, result, 0, value.length);
        return result;
    }

      这样一来,想要获取到这个字符数组,首先想到的就是反射了。反射同样可以解除封装,所以private也不会造成什么威胁!

    public static void main(String[] args) throws Exception{
        String str = "hello" ;    //实例化一个String类对象
        String s = str ;    //用于后面的比较测试
        //打印字符串和hashCode编码
        System.out.println(str + "::" + str.hashCode());//hello::99162322
        Class<?> cls = String.class;
        Field value = cls.getDeclaredField("value");
        value.setAccessible(true);
        char[] arr = (char[]) value.get(str);    //反射取得str对象的字符数组
        arr[0] = 's' ;   //修改字符数组的内容
        System.out.println(str + "::" + str.hashCode());//sello::99162322
        System.out.println(s == str); //比较两次是否相同
    }

      这样一来,就可以修改字符串的引用内容了。同样,使用Field中的set方法也可以设置一个新的字符数组。

    public static void main(String[] args) throws Exception {
        String str = "hello"; // 实例化一个String类对象
        char c[] = new char[]{'a','a','a','a','a','a','a','a'};
        String s = str; 
        System.out.println(str + "::" + str.hashCode());
        Class<?> cls = String.class;
        Field value = cls.getDeclaredField("value");
        value.setAccessible(true);
        value.set(str, c);
        System.out.println(str + "::" + str.hashCode());
        System.out.println(s == str);
    }

    转载于:https://www.cnblogs.com/xzwblog/p/7193912.html

    展开全文
  • 学生学籍管理信息系统

    热门讨论 2009-05-28 14:51:27
    ○4 考试结束,由各系或部将每位学生的考试成绩及其他一些相关信息记录到每个同学的档案。 根据以上总结,得出可行的业务流程图 办理登记手续 系部 安排课程 档案信息 开始学习活动 3.2 构造系统的逻辑...
  • 平常应加强信息安全意识,对来源不明的可执行程序绝好奇。 2、 更新操作系统,让操作系统的安装程序重新拷贝正确版本的系统档案、修正系统参数。有时候操作系统本身也会有BUG,要注意安装官方发行的升级程序。 3...
  • java关键字static

    2019-07-24 12:09:16
    static 静态里面的内容是线程共享的 被他修饰的东西属于类而不属于对象...类加载过程 只要程序出现了 类得信息 jvm’就会将信息从磁盘中得.class文件 加载到方法区而方法区是共享得所以是线程不安全的 ...

    static
    静态里面的内容是线程共享的
    被他修饰的东西属于类而不属于对象

    
    public class Cat {
    	private static int age;	
    	String color;
    .
    .
    .
    .
    

    如这个cat类有一个静态变量age

      Cat aCat = new Cat();
      Cat bCat = new Cat();
      aCat.age = 100;
      bCat.age = 200;
    

    在执行完这句代码后 aCat的值是多少呢

    答案是200

    再附送一个例子 用静态变量显示new了几个对象

    
     package com;
     
     import java.util.jar.Attributes.Name;
     
     public class StaticTest {
     
      public static void main(String[] args) {
       // TODO 自动生成的方法存根
     
       Employee1[] staff = new Employee1[3];
       staff[0] = new Employee1("Tom", 40000);
       staff[1] = new Employee1("Dick", 60000);
       staff[2] = new Employee1("Harry", 65000);
       
       for(Employee1 e:staff) {
        e.setId();
        System.out.println("name=" + e.getName() + ",id=" + e.getId() + ",salary=" + e.getSalary());
       }
       int n = Employee1.getNextId();
       System.out.println("Next available id=" + n);
      }
     
     }
     class Employee1{
      
      private static int nextId = 1;
      private String name;
      private double salary;
      private int id;
      
      public Employee1(String n,double s) {
       // TODO 自动生成的构造函数存根
       name = n;
       salary = s;
       id = 0;
      }
      public String getName() {
       return name;
      }
      public double getSalary() {
       return salary;
      }
      
      public int getId() {
       return id;
      }
      public void setId() {
       
       id = nextId ;
       nextId++;
       
      }
      
      public static int getNextId() {
       return nextId;
       
       
      }
      public static void main(String []args) {
       
       
       Employee1 employee = new Employee1("Harty", 50000);
       System.out.println(employee.getName() + " " + employee.getSalary());
      }
      
     }
    

    这就是我们所说的被static修饰的变量是被整个类共享的所有对象共享一个
    任何一个对象将其改变其他所有对象的该属性都发生变化所以是线程不安全

    被static修饰得方法 在对象new之前就存在

    类加载过程 只要程序中出现了 改类得信息 jvm就会将改类信息从磁盘中得.class文件 加载到方法区而方法区是共享得所以是线程不安全的

    展开全文
  • 众所周知,随着信息化建设的不断深入,信息系统的广泛应用大幅提升了业务效率,其地位日益凸显。正因如此,信息系统运行一旦中断,将会对相关组织及机构的业务运营造成严重影响...信息系统或数据库运行过程可避免
  • 所谓RFID-SIM就是将普通SIM卡和RFID芯片做集成,使得一片SIM卡还具备RFID的功能,彻底改变传统SIM卡只能和手机进行通讯的缺点,使更换了RFID-SIM卡的手机可以随时和周围的设备进行交互,并且影响SIM卡的原有功能...
  • .net支付宝接口源码

    千次下载 热门讨论 2009-01-15 16:10:59
    为了方便测试,在index.asp这个页面采用的是以日期的形式的数字字符串,这个订单号必须保证提交给支付宝的时候是唯一的,否则支付不了 2. return_url 和 notify_url 的区别及其操作. 买家付款成功后,如果接口指定有...
  • subst模拟盘符

    2016-10-09 20:13:31
    因为编译出来的PE文件里面有开发目录的全路径,这属于信息泄漏. 写好设置开发目录模拟盘的脚本后,测试过了,即使是编译的是Debug版程序,PE也没有原始开发目录的信息了, 只能看到基于虚拟盘的相对开发路径. ...
  • Windows NT/2000/XP/2003系统支持NTFS文件系统,采用NTFS可以有效增强系统的安全性,但在ACL(访问控制列表)对用户访问权限设置当时,也会导致用户无法正常访问本机共享资源,出现“权限不足”的提示信息。...
  • 互联网支持库的“FTP目录列表”命令返回的文件时间为FTP服务器返回的原始时间,做任何时区转换。 4. 互联网支持库的“置代理服务器”命令增加了参数,用于支持代理服务器用户认证。 5. 修改控制台操作...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    本书着重介绍语言本身,比较少涉及应用,不错的入门书,从头讲起,不怕明白。 <<page 1>> page begin==================== 目 目目 目 录 录录 录 第一部分 C#语言概述.4 第一章 第一章第一章 第...
  • C#微软培训资料

    2014-01-22 14:10:17
    18.2 在 C #代码调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...
  • 七是特有的定时自动锁功能会在您停止操作一定时间后自动锁定密码管家,最大限度保护您的信息安全。 有了『密码管家』的协助,任何与密码相关的难题都是浮云,一切尽在您的轻松掌握! 【版本】v3.0.0 免费版 【支持...
  • 2. 高安全性,独立自主,所有的程序数据,交易记录,商品图片信息等都安全的放到自己的服务器里面,需要依赖任何第三方,受任何第三方约束,你的就是你的! 3. 产品品质突出,无论从代码的架构设计,还是从编写...
  • 存储内容是商品的id、商品名称、商品单价、商品类别、商品数量、商品详细信息、商品成色、商品附带的图片地址、热门程度、发表用户的id、留言的集合,当用户发表之后,保存数据到Bean对象,并将它存储到数据库。...
  • 七是特有的定时自动锁功能会在您停止操作一定时间后自动锁定密码管家,最大限度保护您的信息安全。 有了『密码管家』的协助,任何与密码相关的难题都是浮云,一切尽在您的轻松掌握! 【版本】v2.5.0 免费版 【支持...
  • 不属于任何栏目的文章增加是否可以发表评论的选项 增加标签{$PageNum}来显示当前页的页数 图片频道显示图片Alt属性,单张图片说明 会员注册时加入ajax验证数据有效性 支持单独设置管理员自定义页面管理权限 ...
  • 137端口的主要作用是在局域网提供计算机的名字或IP地址查询服务,一般安装了NetBIOS协议后,该端口会自动处于开放状态137、138端口都属于UDP端口,它们在局域网相互传输文件信息时,就会发生作用。而138端口的...
  • 什么是VLAN

    2013-10-23 09:59:12
    同时,若没有路由的话,不同VLAN之间能相互通讯,这样增加了企业网络不同部门之间的安全性。网络管理员可以通过配置VLAN之间的路由来全面管理企业内部不同管理单元之间的信息互访。交换机是根据交换机的端口来...
  • 系统之所以提供大量的设置选项,是为了让懂网页制作和编程的朋友也能简单的后台操作,就可以建立属于自己的系统。 LFMessS 岭峰网行业专用留言系统前台界面: LFMessS 岭峰网行业专用留言系统移动端前台界面...
  • 去掉了在连接 admin 时报"[admin] we only handle text-based queries (COM_QUERY)"的信息,此信息属于无用的信息 去掉了在set backend offline/online时的返回值信息,此信息是无用信息 解决用户...
  • 本系统负责操作系统、数据库、硬件、网络接入等方面安全性,而主要负责应用WEB和客户端工具软件的安全性,在此问题上,本系统提供了认证、限制、审核、追查、**志、备份等多种安全策略,通过系统管理员、匿名用户...
  • 5.3.4 Database Control的其他安全管理集成 199 5.4 UTL_程序包网络访问管理 199 5.4.1 UTL_*网络程序包的细粒度访问控制 200 5.4.2 Automatic Storage Management的sysasm权限 206 5.4.3 LOB加密增强 207 ...
  • 注意截图的提示信息,方便后期安全性的更新操作! 【 补充】: 管理员的登录失效时间,请到 session.php 配置文件进行修改哦 推荐参考【 php如何openssl_encrypt加密解密】 文档—— php openssl_encrypt

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 146
精华内容 58
关键字:

属于信息安全中改不了