Memcached UDP 反射攻击漏洞

问题记录

  今天中午有同事反应某系统打开很慢,以为是电脑问题(手动偷笑)。打开网站一看,慢的连静态文件都是几KB/S的速度。这明显不合理啊。上服务器一查,CPU正常、内存正常、Web程序也正常。

  于是想到了网络带宽问题。用vnstat -i eth1 -l一看,惊呆了😮,出网带宽达到了 162.44Mbit/s,这不是被攻击了么?

3971524549705_.pic_hd

Go 采用 time.After 实现超时控制

场景:

假设业务中需调用服务接口A,要求超时时间为5秒,那么如何优雅、简洁的实现呢?

我们可以采用select+time.After的方式,十分简单适用的实现。

首先,我们先看time.After()源码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10

// After waits for the duration to elapse and then sends the current time
// on the returned channel.
// It is equivalent to NewTimer(d).C.
// The underlying Timer is not recovered by the garbage collector
// until the timer fires. If efficiency is a concern, use NewTimer
// instead and call Timer.Stop if the timer is no longer needed.
func After(d Duration) <-chan Time {
	return NewTimer(d).C
}

time.After()表示time.Duration长的时候后返回一条time.Time类型的通道消息。那么,基于这个函数,就相当于实现了定时器,且是无阻塞的。

PHP 表单提交数据项过多被截取问题

问题描述

今早业务系统中的带宽工具,出现因 Form 表单中传递的数据项过多,而后端 PHP 出现缺失部分参数值的问题。

问题原因

php.ini中有一配置项max_input_vars,默认值为1000。

表示接受多少输入的变量(限制分别应用于$_GET$_POST$_COOKIE超全局变量) 指令的使用减轻了以哈希碰撞来进行拒绝服务攻击的可能性。如有超过指令指定数量的输入变量,将会导致E_WARNING的产生,更多的输入变量将会从请求中截断。

Linux 命令 —— lsof 查看打开的文件信息

lsof (list open files)是一个列出当前系统打开文件的工具。拥有查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP),找回/恢复删除的文件等功能。

在 Linux 环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过 lsof 工具能够查看这个列表对系统监测以及排错将是很有帮助的。

因为 lsof 命令需要访问核心内存和各种文件,所以需要 root 用户执行。

命令格式

1
lsof [参数] [文件]

sar —— Linux 上最为全面的系统性能分析工具之一

sar(System Activity Reporter 系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘 I/O、CPU 效率、内存使用状况、进程活动及 IPC 有关的活动等。

我们可以使用sar命令来获得整个系统性能的报告。这有助于我们定位系统性能的瓶颈,并且有助于我们找出这些烦人的性能问题的解决方法。

Linux 内核维护着一些内部计数器,这些计数器包含了所有的请求及其完成时间和 I/O 块数等信息,sar命令从所有的这些信息中计算出请求的利用率和比例,以便找出瓶颈所在。

sar命令主要的用途是生成某段时间内所有活动的报告,因此必需确保sar命令在适当的时间进行数据采集(而不是在午餐时间或者周末)

sysstat——系统性能监控神器

sysstat是一个软件包,包含监测系统性能及效率的一组工具,这些工具对于我们收集系统性能数据,比如:CPU 使用率、硬盘和网络吞吐数据,这些数据的收集和分析,有利于我们判断系统是否正常运行,是提高系统运行效率、安全运行服务器的得力助手。

官方网站: http://sebastien.godard.pagesperso-orange.fr

包含的工具

  • iostat

    输出CPU的统计信息和所有I/O设备的输入输出(I/O)统计信息

  • mpstat

    关于CPU的详细信息(单独输出或者分组输出)

PHP 实现斐波那契数列的三种方式

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。

数列: 0, 1, 1, 2, 3, 5, 8, 13, … 规律: 从第三个数开始,后一个数是前两个数之和 公式: F(0) = 0,F(1) = 1, F(n) = F(n-1) + F(n-2)(n>2,n∈N*)

PHP 实现

递归

> 时间复杂度: `O(2^n)`
1
2
3
4
5
6
7
function fib($n) {
    if ($n == 0 || $n == 1) {
        return $n;
    }

    return fib($n - 1) + fib($n - 2);
}

JWT 资料

—— JSON Web Tokens 官网

JWT 是一种用于双方之间传递安全信息的简洁的、URL 安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 Json 对象的形式安全的传递信息。因为数字签名的存在,这些信息是可信的,JWT 可以使用 HMAC 算法或者是 RSA 的公私秘钥对进行签名。

开源类库