2014年9月

XSS入门学习笔记&资料整理

XSS入门学习资料整理:

1、首先是乌云白帽“心伤的瘦子”的 [腾讯实例教程] 那些年我们一起学XSS系列,共有21讲,由浅入深,口味极佳,五星推荐! LINK

心伤的瘦子XSS系列

2、然后是FreeBuf上作者black-hole的系列,目前连载中。

  • XSS的原理分析与解剖 LINK
  • XSS的原理分析与解剖(第二篇)LINK

3、基础知识汇聚,需求自取:


Apache 并发优化设置

1. 先查看apache的运行模式

查看命令:httpd -l
[Linux]

Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c

这里可以看到运行模式是prefork模式。

[Windows]

Compiled in modules:
core.c
mod_win32.c
mpm_winnt.c
http_core.c
mod_so.c

这里可以看到运行模式是winnt模式。

2. 修改apache 的httpd-mpm.conf 配置

[Linux]
打开 /usr/local/apache2/conf/extra/httpd-mpm.conf ,每个机器可能httpd-mpm.conf 可能不同,这里可以通过find 命令查询。
第一次打开的时候默认配置是这样的。

       <IfModule mpm_prefork_module>
           StartServers          5
           MinSpareServers       5
           MaxSpareServers      10
           MaxClients          150
           MaxRequestsPerChild   0
       </IfModule>

其中:

StartServers 表示空闲子进程的最小数量。如果当前空闲子进程数小于MinSpareServers,那么Apache将以最大美妙一个的速度产生新的子进程。此参数不要设置太大。
MinSpareServers 设置空闲子进程的最大数量。如果当前有超过MaxSpareServers 数量的空闲子进程,那么父进程将杀死多余的子进程。此参数不要设置太大,如果你讲质量设置比MinSpareServers小,Apache将会自动将其修改成“MinSpareServers + 1”。
MaxSpareServers 限定同一时间客户最大接入请求的数量(单个进程并发线程数)。任何超过MaxClients限制的请求讲进入等候队列,一旦一个连接被释放,队列中的请求将得到服务。要增大该值必须同事增大ServerLimit(ServerLimit待会再讲)。
MaxClients 表示每个子进程在其生存期内允许伺候的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为“0”,子进程将永远不会结束。
MaxRequestsPerChild 设置为0 ,可以防止(偶然)内存泄漏无限进行,从而耗尽内存。给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。

[Windows]
在mpm_winnt模式下,Apache不使用prefork也不使用work工作模式,切记!
因此,我们只要找到原文件中:

<IfModule mpm_winnt_module>
    ThreadsPerChild      150
    MaxRequestsPerChild    0
</IfModule>

上述参数解释:

- ThreadsPerChild
是指一个进程最多拥有的线程数(Windows版本,貌似不可以开启多个进程),一般100-500就可以,根据服务器的具体性能来决定。
- MaxRequestsPerChild
是指一个线程最多可以接受的连接数,默认是0,就是不限制的意思,
0极有可能会导致内存泄露。所以,可以根据实际情况,配置一个比较大的值。Apache会在几个线程之间进行轮询,找到负载最轻的一个线程来接受新的连接。

3.现在看看需要怎么优化

[Linux]
连接数理论上是越大越好,但是得根据硬件,服务器的CPU,内存,带宽等因素,查看当前的apache连接数:
ps aux | grep httpd | wc -l
计算httpd 占用内存的平均数:
ps aux | grep -v grep |awk '/httpd/{sum += $6;n++};END{print sum/n}'
这个只是做个参考。计算后要减去服务器系统本身所需要的资源。
比如内存2G,减去500M留给服务器,还有1.5G,那么可得到最大连接数:在8000左右。
根据情况修改后的http-mpm.conf的prefork的配置后为:

      <IfModule mpm_prefork_module>
     StartServers          5
     MinSpareServers       5
     MaxSpareServers      10
     ServerLimit         5500
     MaxClients          5000
     MaxRequestsPerChild   100
      </IfModule>

这里重点介绍下ServerLimit,必须放到MaxClients前,值要大于MaxClients。
[Windows]
我根据机器情况修改后的配置为:

<IfModule mpm_winnt_module>
    ThreadsPerChild      300
    MaxRequestsPerChild    2000
</IfModule>

注意:
修改后,一定不要apacherestart,而是先 apache stop 然后再 apache start才可以。