绿盟漏扫系统漏洞及修复方案

漏洞1

详细描述:

1.X-Content-Type-Options HTTP 消息头相当于一个提示标志,被服务器用来提示客户端一定要遵循在 Content-Type 首部中对 MIME 类型 的设定,而不能对其进行修改。这就禁用了客户端的 MIME 类型嗅探行为,换句话说,也就是意味着网站管理员确定自己的设置没有问题。X-Content-Type-Options响应头的缺失使得目标URL更易遭受跨站脚本攻击。

2.HTTP X-XSS-Protection 响应头是 Internet Explorer,Chrome 和 Safari 的一个特性,当检测到跨站脚本攻击 (XSS)时,浏览器将停止加载页面。X-XSS-Protection响应头的缺失使得目标URL更易遭受跨站脚本攻击。

3.OPTIONS方法是用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。OPTIONS方法可能会暴露一些敏感信息,这些信息将帮助攻击者准备更进一步的攻击。

4.Web 服务器对于 HTTP 请求的响应头中缺少 Strict-Transport-Security,这将导致浏览器提供的安全特性失效。 当 Web 服务器的 HTTP 头中包含 Strict-Transport-Security 头时,浏览器将持续使用 HTTPS 来访问 Web 站点,可以用来对抗协议降级攻击和 Cookie 劫持攻击。
其可选的值有: max-age=SECONDS,表示本次命令在未来的生效时间 includeSubDomains,可以用来指定是否对子域名生效 漏洞危害: Web 服务器对于 HTTP 请求的响应头中缺少 Strict-Transport-Security,这将导致浏览器提供的安全特性失效,更容易遭受 Web 前端黑客攻击的影响。

5.Web 服务器对于 HTTP 请求的响应头中缺少 Referrer-Policy,这将导致浏览器提供的安全特性失效。 当用户在浏览器上点击一个链接时,会产生一个 HTTP 请求,用于获取新的页面内容,而在该请求的报头中,会包含一个 Referrer,用以指定该请求是从哪个页面跳转页来的,常被用于分析用户来源等信息。但是也成为了一个不安全的因素,所以就有了 Referrer-Policy,用于过滤 Referrer 报头内容,其可选的项有: no-referrer no-referrer-when-downgrade origin origin-when-cross-origin same-origin strict-origin strict-origin-when-cross-origin unsafe-url 漏洞危害: Web 服务器对于 HTTP 请求的响应头中缺少 Referrer-Policy,这将导致浏览器提供的安全特性失效,更容易遭受 Web 前端黑客攻击的影响。

6.Web 服务器对于 HTTP 请求的响应头中缺少 X-Permitted-Cross-Domain-Policies,这将导致浏览器提供的安全特性失效。 当一些在线的 Web Flash 需要加载其他域的内容时,很多 Web 会通过设置一个 crossdomain.xml 文件的方式来控制其跨域方式。很有可能有些开发者并没有修改 crossdomain.xml 文件的权限,但是又有和跨域的 Flash 共享数据的需求,这时候可以通过设置 X-Permitted-Cross-Domain-Policies 头的方式来替代 crossdomain.xml 文件,其可选的值有: none master-only by-content-type by-ftp-filename all 漏洞危害: Web 服务器对于 HTTP 请求的响应头中缺少 X-Permitted-Cross-Domain-Policies,这将导致浏览器提供的安全特性失效,更容易遭受 Web 前端黑客攻击的影响。

7.Web 服务器对于 HTTP 请求的响应头中缺少 X-Download-Options,这将导致浏览器提供的安全特性失效。 漏洞危害: Web 服务器对于 HTTP 请求的响应头中缺少 X-Download-Options,这将导致浏览器提供的安全特性失效,更容易遭受 Web 前端黑客攻击的影响。

8.HTTP 响应头Content-Security-Policy允许站点管理者控制用户代理能够为指定的页面加载哪些资源。除了少数例外情况,设置的政策主要涉及指定服务器的源和脚本结束点。Content-Security-Policy响应头的缺失使得目标URL更易遭受跨站脚本攻击。

9.点击劫持(ClickJacking)是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。
HTTP 响应头信息中的X-Frame-Options,可以指示浏览器是否应该加载一个 iframe 中的页面。如果服务器响应头信息中没有X-Frame-Options,则该网站存在ClickJacking攻击风险。网站可以通过设置 X-Frame-Options 阻止站点内的页面被其他页面嵌入从而防止点击劫持。

解决方法:

以上漏洞均为http-header(响应头)缺失漏洞,我们可以通过添加一个过滤器来添加相应的响应头,具体代码如下:

@Component
public class AddResponseHeaderFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {response.addHeader("content-test","1234");// X-Frame-Options 取值有三种:DENY、SAMEORIGIN、ALLOW-FROM urlresponse.addHeader("X-Frame-Options","SAMEORIGIN");response.addHeader("Referrer-Policy","origin");response.addHeader("Content-Security-Policy", "object-src 'none'");response.addHeader("X-Permitted-Cross-Domain-Policies","master-only");response.addHeader("X-Content-Type-Options","nosniff");response.addHeader("X-XSS-Protection","1; mode=block");response.addHeader("X-Download-Options","noopen");response.addHeader("Strict-Transport-Security","max-age=63072000; includeSubdomains; preload");// 解决安全漏洞:检测到目标服务器启用了OPTIONS方法response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Credentials", "true");response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS");response.setHeader("Access-Control-Max-Age", "86400");response.setHeader("Access-Control-Allow-Headers", "*");// 如果是OPTIONS则结束请求if (HttpMethod.OPTIONS.toString().equals(httpServletRequest.getMethod())) {response.setStatus(HttpStatus.NO_CONTENT.value());}//加入过滤链filterChain.doFilter(httpServletRequest,response);}
}

漏洞2

详细描述:

jQuery是美国John Resig程序员的一套开源、跨浏览器的JavaScript库。 jQuery 大于或等于1.2.0至3.5.0的版本中存在跨站脚本漏洞,该漏洞源于WEB应用缺少对客户端数据的正确验证。即使执行sanitize处理,也仍会执行将来自不受信任来源的HTML传递给jQuery的DOM操作方法(即html()、.append()等),攻击者可利用该漏洞执行客户端代码。

漏洞原理可参考以下链接:https://mp.weixin.qq.com/s/QW5v5d7829m0Pz6AA6_XPQ

解决方法:

更新jQuery版本至3.5.0以上,但是更新jQuery会导致我们的应用出现问题,因为高版本jQuery会弃用很多低版本的函数,这是我们可以同时引入官方提供的应用迁移辅助插件jQuery-migrate,下载最新版本插件以解决上述问题,附下载链接如下。

jQuery下载:https://jquery.com/download/

jQuery-migrate下载:https://www.bootcdn.cn/jquery-migrate/

漏洞3

详细描述:

Spambot 搜寻因特网站点,开始查找电子邮件地址来构建发送自发电子邮件(垃圾邮件)的邮件列表。如果检测到含有一或多个电子邮件地址的响应,可供利用以发送垃圾邮件。而且,找到的电子邮件地址也可能是专用电子邮件地址,对于一般大众应是不可访问的。

解决方法:

将我们代码内出现的真实电子邮箱去掉,包括注释在内的,如下代码所示:

/** JQuery zTree core v3.5.16* http://zTree.me/** Copyright (c) 2010 Hunter.z** Licensed same as jquery - MIT License* http://www.opensource.org/licenses/mit-license.php** email: hunter.z@263.net* Date: 2014-03-09*/

漏洞4

详细描述:

Cookie通常由Web服务器创建并存储在客户端浏览器中,用来在客户端保存用户的身份标识、Session信息,甚至授权信息等。客户端JavaScript代码可以操作Cookie数据。如果在客户端使用JavaScript创建或修改站点的cookie,那么攻击者就可以查看到这些代码,通过阅读代码了解其逻辑,甚至根据自己所了解的知识将其用来修改cookie。一旦cookie包含了很重要的信息,譬如包含了权限信息等,攻击者很容易利用这些漏洞进行特权升级等攻击。

解决方法:

在前文漏洞1过滤器的基础上,添加处理cookie问题代码,过滤所有请求,即可解决问题。

@Component
public class AddResponseHeaderFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {response.addHeader("content-test","1234");// X-Frame-Options 取值有三种:DENY、SAMEORIGIN、ALLOW-FROM urlresponse.addHeader("X-Frame-Options","SAMEORIGIN");response.addHeader("Referrer-Policy","origin");response.addHeader("Content-Security-Policy", "object-src 'none'");response.addHeader("X-Permitted-Cross-Domain-Policies","master-only");response.addHeader("X-Content-Type-Options","nosniff");response.addHeader("X-XSS-Protection","1; mode=block");response.addHeader("X-Download-Options","noopen");response.addHeader("Strict-Transport-Security","max-age=63072000; includeSubdomains; preload");// 解决安全漏洞:检测到目标服务器启用了OPTIONS方法response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Credentials", "true");response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS");response.setHeader("Access-Control-Max-Age", "86400");response.setHeader("Access-Control-Allow-Headers", "*");// 如果是OPTIONS则结束请求if (HttpMethod.OPTIONS.toString().equals(httpServletRequest.getMethod())) {response.setStatus(HttpStatus.NO_CONTENT.value());}//处理cookie问题Cookie[] cookies = httpServletRequest.getCookies();if (cookies != null) {for (Cookie cookie : cookies) {String value = cookie.getValue();StringBuilder builder = new StringBuilder();builder.append(cookie.getName()+"="+value+";");builder.append("Secure;");//Cookie设置Secure标识builder.append("HttpOnly;");//Cookie设置HttpOnlyres.addHeader("Set-Cookie", builder.toString());}}//加入过滤链filterChain.doFilter(httpServletRequest,response);}
}

漏洞5

详细描述:

检测到目标应用程序使用HTTP连接接受客户端的登录请求,如果登录请求数据没有加密处理,有可能被攻击者嗅探到客户端提交的请求数据,请求数据中一般包含用户名和密码,导致信息泄露。本漏洞属于Web应用安全常见漏洞。

解决方法:

使用HTTPS连接发送登录请求数据。具体实现方法如下:

1.生成证书

打开生成证书位置的目录,在视图框输入cmd。

2.在小黑框输入以下命令,回车

keytool -genkeypair -alias "boot" -keyalg "RSA" -keystore "seek.keystore"

3.输入命令秘钥,我这里输入的是123456,你是看不到你输入的内容的

4…再次输入秘钥:123456

5.接着一步步输入信息,最后是否确认输入Y,点击回车

6.再2次输入秘钥口令:123456

7.将生成的证书放到resources目录下

8.在项目applicaion.properties或者applicaion.yml配置类中配置一下信息

server.port=8084
server.ssl.key-store= classpath:seek.keystore
server.ssl.key-store-password=123456
server.ssl.keyStoreType=jks
server.ssl.keyAlias=boot

9.在前端页面统一引入以下标签启用https:

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

10.在springboot的启动类中添加如下代码:

   /*** it's for set http url auto change to https*/@Beanpublic TomcatServletWebServerFactory servletContainer() { //springboot2 新变化TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {@Overrideprotected void postProcessContext(Context context) {SecurityConstraint securityConstraint = new SecurityConstraint();securityConstraint.setUserConstraint("CONFIDENTIAL");SecurityCollection collection = new SecurityCollection();collection.addPattern("/*");securityConstraint.addCollection(collection);context.addConstraint(securityConstraint);}};tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());return tomcat;}private Connector initiateHttpConnector() {Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");connector.setScheme("http");connector.setPort(8080);connector.setSecure(false);connector.setRedirectPort(8084);return connector;}

漏洞6

详细描述:

缓慢的HTTP拒绝服务攻击是一种专门针对于Web的应用层拒绝服务攻击,攻击者操纵网络上的肉鸡,对目标Web服务器进行海量HTTP请求攻击,直到服务器带宽被打满,造成了拒绝服务。慢速HTTP拒绝服务攻击经过不断的演变和发展,主要有三种攻击类型,分别是Slow headers、Slow body、Slow read。以Slow headers为例,Web应用在处理HTTP请求之前都要先接收完所有的HTTP头部,因为HTTP头部中包含了一些Web应用可能用到的重要的信息。攻击者利用这点,发起一个HTTP请求,一直不停的发送HTTP头部,消耗服务器的连接和内存资源。抓包数据可见,攻击客户端与服务器建立TCP连接后,每10秒才向服务器发送一个HTTP头部,而Web服务器在没接收到2个连续的\r\n时,会认为客户端没有发送完头部,而持续的等等客户端发送数据。如果恶意攻击者客户端持续建立这样的连接,那么服务器上可用的连接将一点一点被占满,从而导致拒绝服务。这种攻击类型称为慢速HTTP拒绝服务攻击。

解决方法:

在项目applicaion.properties或者applicaion.yml配置类中配置以下信息

server:...tomcat:max-connections: 10000 # 最大连接数connection-timeout: 1000 # 连接超时

漏洞7

详细描述:

为了方便的获得网站域名,开发人员一般依赖于HTTP Host header。例如,在php里用_SERVER[“HTTP_HOST”]。但是这个header是不可信赖的,如果应用程序没有对host header值进行处理,就有可能造成恶意代码的传入。

解决方法及验证过程:

经过查询相关资料,该漏洞解决主要分为两种方式:

1.如果项目tomcat服务器引入的外部tomcat,修改tomcat配置文件server.xml添加访问IP白名单即可

2.如果是内嵌的tomcat,比如springboot项目,可以选择如下方法添加过滤器(过滤器仍旧使用漏洞一所用过滤器,添加部分代码即可):

import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@Component
public class AddResponseHeaderFilter extends OncePerRequestFilter {//判断主机是否存在白名单中private boolean checkBlankList(String host){/*//这一段是用来检测是否有端口,如有去掉端口(根据自己需求看是否要加上)if (host.contains(":")){host = host.substring(0,host.indexOf(":"));}*///这里host有时候会包括项目端口号,下面白名单IP可以写成一个集合,看集合是否包含当前访问IPif (host.contains("换成您的ip地址")||host.contains("换成您的ip地址")){return true;}return false;}@Overrideprotected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {// 头攻击检测  过滤主机名if (httpServletRequest.getMethod().equals("POST")){System.out.println("POST==================================================");}String requestHost = httpServletRequest.getHeader("host");if (requestHost != null && !checkBlankList(requestHost)) {response.setStatus(403);return;}filterChain.doFilter(httpServletRequest,response);}
}

此时不在我们主机白名单内的host访问将会被拒绝,下面我们修改host进行测试:

1.修复前测试:使用burpsuite软件抓包测试,打开软件后访问我们的测试站点,ip为180.201.151.125,端口号为8084

修改host后:

2.修复后测试:

修改host后:

此时我们自然以为大功告成,漏洞已经修复,但是实际结果却不尽人意,经过绿盟扫描后仍然检测存在该漏洞!

由于漏洞主要发现于登录请求中,我们想到之前测试并没有加参数,也就是登陆页面所需要的账号密码,因此我们测试加上账号密码参数如下:

然后我们修改host继续测试:

经过以上测试,说明我们的项目仍然存在该漏洞,经过debug以及日志打印,我们发现设定的过滤器并没有对登录请求生效,登录请求为POST请求:

因此,回到项目处理登录请求的部分,项目为springboot项目,使用了spring security进行登录鉴权,因此登陆请求是由spring security来完成的,因此我们猜测我们添加的过滤器在spring security内部并没有生效,按照该思路查阅spring security内部是否存在相关过滤器,经查询,spring security内部存在一条过滤链,在我们启动项目时会打印出来,过滤链如下:

Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@608aed14, org.springframework.security.web.context.SecurityContextPersistenceFilter@f76ba38, org.springframework.security.web.header.HeaderWriterFilter@757eee91, org.springframework.security.web.authentication.logout.LogoutFilter@69e19cb, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@3386990d, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@5e6e4341, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@7e2986c0, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@27098668, org.springframework.security.web.session.SessionManagementFilter@73edeae3, org.springframework.security.web.access.ExceptionTranslationFilter@50a23426, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@6b53f420]

可以看到过滤链中有一个过滤器名称为UsernamePasswordAuthenticationFilter,从名称就可以看出这是处理用户名和密码的过滤链,我们将前面自定义的过滤器添加到该过滤器中,添加方式如下:

import org.springframework.context.annotation.Configuration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
import org.springframework.security.web.firewall.HttpFirewall;
import org.springframework.security.web.firewall.StrictHttpFirewall;import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@EnableWebSecurity
@Configuration
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity httpSecurity) throws Exception {httpSecurity.addFilterBefore(new AddResponseHeaderFilter(), UsernamePasswordAuthenticationFilter.class);.authorizeRequests().anyRequest().permitAll();}

然后我们重新抓包测试:

重新使用扫描器扫描后漏洞修复完成!

附:http状态码

200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
eg:HTTP/1.1 200 OK (CRLF)

绿盟漏扫系统漏洞及修复方案相关推荐

  1. 绿盟漏扫使用手册_【技术干货】Oracle数据库漏洞扫描指南

    阅读: 1,449 在使用漏洞扫描产品对Oracle数据库进行漏洞扫描的时候,需要区分使用的扫描方式,否则可能对后续的修复加固工作带来一系列的困扰.一般来讲,Oracle数据库扫描分为远程扫描和登录扫 ...

  2. Python 绿盟远程安全评估系统(RSAS)漏洞跟踪表导出工具

    更新 2019年4月3日,最后一次更新了,改不动了,一点备注都没有,这代码自己都看不懂了. 新增了自定义模板和导出的数据,不仅能满足大佬们,公司使用也是没什么问题的. GitHub源码: https: ...

  3. rsas可以扫描linux,GitHub - vtatv/RSAS-Task-Release: 绿盟远程安全评估系统(RSAS)-RSAS批量下任务工具...

    0x01 工具介绍 Python+pyqt5编写,界面分离方式,采用模拟请求的方式实现,非官方数据接口,所有扫描器都能用. 适用以下人群: 用绿盟扫描器扫漏洞的 任务下到手抽筋心烦的 动不动就能把系统 ...

  4. 绿盟web应用防火墙(主机版)中国教育和科研计算机网,绿盟远程安全评估系统NSFOCUS RSAS...

    每年都有数以千计的网络安全漏洞被发现和公布,加上攻击者手段的不断变化,网络安全状况也在随着安全漏洞的增加变得日益严峻.事实证明,99%的攻击事件都利用了未修补的漏洞,使得许多已经部署了防火墙.入侵检测 ...

  5. 绿盟远程安全评估系统(RSAS)使用步骤

    绿盟远程安全评估系统(RSAS)使用步骤: (1)通过网线将工具的M口与管理工具的主机连接: (2)更改管理主机网卡地址为192.168.1.0网段内地址,ping 通192.168.1.1: (3) ...

  6. 常见主机漏洞及修复方案

    1.openssh累积型漏洞  高  cve-2017-10012 修复意见: 升级版本至>=openssh-5.3p1-122.el6 2.NTP累积型漏洞  高 修复意见: 稳定版请尽快安装 ...

  7. 检测到目标URL存在http host头攻击漏洞,修复方案:在Web服务器防止Host头攻击

    一.前言 漏洞描述:为了方便的获得网站域名,开发人员一般依赖于HTTP Host header.例如,在php里用_SERVER["HTTP_HOST"].但是这个header是不 ...

  8. 绿盟安全事件响应观察漏洞频繁爆发

    漏洞频繁爆发 系统或应用的安全疏漏.安全人员对利用方式的公开.黑客对 PoC 恶意散播等均有可能导致 0day 漏洞的爆发.2019 年,绿盟科技监测到网络上出现较多的 0day 漏洞公开信息,根据众 ...

  9. 服务器 centos 系统漏洞快速修复简易方法

    最近阿里云服务器又在打折了,然后手一痒就整了一台,因为最近需要更新Devops相关的博客,可以安装Gitlab.jenkins.docker等工具,价格又便宜果断下单: 我买的是第一款,提升了一下带宽 ...

最新文章

  1. python第三节函数,文件操作
  2. 中国水产饲料市场发展深度调研及十四五前景预测报告2022年版
  3. 鸿蒙与安卓系统简单对比,绝非追求三分天下。
  4. 服务器上有涉密文件,涉密文件保密管理规定
  5. Docker启动Mysql容器失败,挂载时权限不足,chown: changing ownership of ‘/var/lib/mysql/‘: Permission denied
  6. 【Git】Git提交代码到GitHub的基本操作流程
  7. struts2:JSON在struts中的应用(JSP页面中将对象转换为JSON字符串提交、JSP页面中获取后台Response返回的JSON对象)...
  8. java 配置文件加载_java加载配置文件信息
  9. 「支持m1」自定义菜单键盘快捷键——CustomShortcuts for mac
  10. 计算机内存4gb是多大,手机内存多大才不卡?专家:4GB足矣
  11. 手持振弦采集仪对振弦传感器激励方法和激励电压
  12. R 计算平均值标准误差
  13. 下一个排列[发挥主观能动性发现规律]
  14. 随手笔记之逆序输出数字
  15. 【API接口大全】查询订单详情/物流信息/交易订单
  16. Erebus 0.5 发布,2D 实时角色扮演游戏
  17. Django配置163邮箱出现 authentication failed(535)错误解决方法
  18. 黑马探花交友----5.聊天消息-即时通讯
  19. SAP.PA认证培训视频教程(58集)
  20. HDU 1593题解

热门文章

  1. Android中使用封装的OKHttp上传图片,从相机和相册中获取图片并剪切
  2. DDR controller控制器之AXI接口模块设计
  3. 【底层思维】思维的深度决定人生的高度,底层思维的4个方法论
  4. pythongui界面实现爬取b站弹幕_Python爬虫自动化爬取b站实时弹幕实例方法
  5. 云计算OpenStack详解
  6. CSS3正方体图片轮换
  7. 基于android的校友帮平台系统
  8. 企查查之企业信息查询自动化
  9. [codeforces 1379B] Dubious Cyrpto 公式推导
  10. postgresql standard_conforming_strings参数