0%

总结和概括一下常见的Web安全注意点

XSS攻击

XSS(Cross Site Script)攻击,是攻击者想Web页面提交恶意脚本,当用户浏览页面的时候就会触发脚本。

攻击思路

  1. 盗取Cookie,模拟用户登录。用document.cookie获取cookie然后发送给某个后台服务器
  2. 弹出”Flash插件已过期”的提示,欺骗用户去钓鱼页下载被种下木马的插件

检测方式

一般的检测方式是检测弹窗,看能否执行alert(1)

  • 对提交后展示的文本,输入<script>alert(1)</script>
  • 提交插入图片的连接,输入javascript:alert(1),图片元素会被渲染成<img src="javascript:alert(1)">
阅读全文 »

容器技术就像集装箱,用最精简的封装,保护组件运行,互不冲突,便于服务迁移。

安装

ArchLinux下可以直接用Pacman安装:sudo pacman -S docker
其他Linux平台可以用官方安装脚本:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
Windows平台下可参照官方的安装说明:Windows 上的 Docker 引擎

以下的操作基于Linux环境。安装成功后,docker -v显示版本:

Docker version 18.09.3-ce, build 774a1f4eee

首次启动前先换源:sudo vim /etc/docker/daemon.json,加入以下内容:
{
"registry-mirrors":["https://registry.docker-cn.com"]
}

启动:
sudo systemctl start docker

阅读全文 »

一般来说Java的对象都是在堆上生成,但是如果一个对象只在当前函数内被使用,那么它可以被分配在栈上。栈上的数据在函数返回时被回收,从而大大减轻了GC的压力。

定义

由Java Hotspot分析对象的使用范围是否只在当前函数内有效,然后控制其在堆分配空间的技术就叫逃逸分析(Escape Analysis)

逃逸分析的相关参数如下:

  • 开启逃逸分析:-XX:+DoEscapeAnalysis
  • 关闭逃逸分析:-XX:-DoEscapeAnalysis
  • 显示分析结果:-XX:+PrintEscapeAnalysis

GC性能分析

接下来就一个具体例子测试逃逸分析是否能优化GC的性能。在IDEA中设置VM Option

  • 堆最大10m,最小也10m,来让其尽快进入GC状态:-Xmx10m -Xms10m
  • 开启GC的打印-XX:+PrintGC
  • 由于Java SE 6u23+之后默认开启了逃逸分析,这里需要先关掉它:-XX:-DoEscapeAnalysis

最终VM Option如下:-Xmx10m -Xms10m -XX:+PrintGC -XX:-DoEscapeAnalysis

阅读全文 »

HTTP/0.9

1991年发布的HTTP/0.9只是一个草案,纯文本格式。蒂姆.伯纳斯.李 最初设想的系统里的文档都是只读的,所以只允许用”GET”动作从服务器上获取HTML文档,并且在响应请求之后立即关闭连接,功能非常有限。此时的HTTP协议没有请求头和请求体的概念,只能用于只读文档请求。

HTTP/1.0

时隔5年,发布的HTTP/1.0

  • 规定了HTTP的请求头,请求体,以及响应头,相应体的概念,并在Header里引入了协议版本号
  • 支持了GET,POST,HEAD等多种方法。
  • 增加了HTTP相应状态码的概念
  • 传输从数据不再仅限于文本

此时的HTTP协议已经和如今的HTTP协议极为类似了。HTTP/1.0采用了短链接,即每次请求一个资源都需要建立一个TCP请求,完成一整套握手和挥手的过程。如:当有100个图片资源时,就会发起100个TCP请求。频繁的连接建立与断开极大消耗了资源。

阅读全文 »

RPC(Remote Procedure Call),在Wiki上的解释是:

In distributed computing, a remote procedure call (RPC) is when a computer program causes a procedure (subroutine) to execute in a different address space (commonly on another computer on a shared network), which is coded as if it were a normal (local) procedure call, without the programmer explicitly coding the details for the remote interaction.

RPC可以用于不同服务进程之间的通信(无论是不是在同一台机器上)。使用RPC可以在不用特定编程的基础上,像调用本地模块一样调用远端模块,这可以广泛用于分布式系统不同服务之间的调用。

RPC基本原理


假设Server1上要调用Server2上的func函数,完成一个基本的a+b运算。Server1需要先将需要把参数1,3序列化,打包成数据包后通过网络发给Server2。Server2拿到数据包后反序列化参数到内存,调用func方法,再把返回结果序列化后返回给Server1。RPC框架参与了数据的序列化和反序列化,数据包的封装与派发,调用目标函数等过程。开发者调用Server1上的func函数时,感觉就好像在调用本地函数一样。

阅读全文 »