初果实验室

  • 修改已经创建的docker容器的端口映射

    本文翻译自Syed Rakib Al Hasanstackoverflow.com的回答

    原始链接:https://stackoverflow.com/questions/19335444/how-do-i-assign-a-port-mapping-to-an-existing-docker-container

    对于已经创建的docker容器,如何修改映射的端口号呢?可以参考如下的操作步骤

    0)  docker container list –all

    结果中的CONTAINER ID列为容器id

    1)  docker inspect <容器id>   |  grep Id

    查看容器hash,<容器id>由步骤0)获得

    2)  docker stop <容器id>

    停止运行中的容器

    3) vim /var/lib/docker/containers/[容器hash]/hostconfig.json

    编辑容器配置文件,<容器hash>由步骤1)获得

    修改PortBindings参数配置,宿主机8001端口映射容器80端口示例:

    “PortBindings”:{“80/tcp”:[{“HostIp”:””,”HostPort”:”8001″}]},”

    4) systemctl restart docker

    重新启动docker引擎

    5)docker start <容器id>

    重新启动docker容器

     

  • 提高WordPress安全性的几点建议

    当您的网站上线后,如果打开访问日志,仔细分析就会发现,有很多访问网站的链接的路径和参数十分奇怪,比如说访问根本不存在的路径,或者参数由一些特殊字符拼接而成,这些大多都是由那些黑客控制的计算机发起的,他们不断扫描检测你的网站的漏洞,猜测你的网站是各种常见的系统,然后利用已知的漏洞探测缺陷并攻击。
     
    对于WordPress系统,第一道防线就是后台,由于原始的后台登陆授权没有验证码机制,攻击者就可以利用穷举的方法试图登入。为了阻止这种入侵,简便的做法是安装验证码插件,这样就可以阻止绝大部分非人类操作。
     
    对于安全性要求更高的网站,还可以安装双重多因素身份认证插件,然后在自己手机上安装一个Google身份验证器,就可以建立起多层次的防御机制。
     
    还有一个安全策略是,在后台的用户管理页面,添加一个用户,用户名不要使用admin/root之类的字符,角色授权为管理员,不要使用这个账号发表文章,其他的用户降低权限为编辑投稿等人员,这样黑客就无法猜到管理员的账号了。
  • 使用WordPress缓存插件WP Super Cache加速您的网站

    WordPress插件WP Super Cache是WordPress母公司Automattic开发的免费缓存插件,可以将网站的内容生成为静态的html文件,之后用户访问服务器就不用解析PHP代码,可以明显得提升访问速度。

    它的自定义功能选项也很完善,可以指定普通模式或者专家模式两种缓存模式,专家模式下需要修改web代理服务器的规则配置。

    还可以针对登陆用户匿名用户使用不同的缓存策略,自定义缓存的目录,自定义页面对评论内容的缓存策略,自定义缓存的刷新时间和垃圾回收的频率,以及配置CDN和预先缓存等高级功能。

    安装的时候要注意给缓存目录和wp-config.php配置文件开放写权限。

  • WordPress自动升级

    在wp-config.php中添加下列代码即可:

    define('WP_AUTO_UPDATE_CORE', true);
    add_filter( 'auto_update_plugin', '__return_true' );
    add_filter( 'auto_update_theme', '__return_true' );

     

  • 使用WordPress懒加载插件a3 Lazy Load加速您的站点

    WordPress插件a3 Lazy Load可以实现网页的懒加载,页面资源会依据需求延迟加载,对于提升用户体验非常有用。

    下载地址: https://wordpress.org/plugins/a3-lazy-load/

    对于包含大量图片的网页,首次打开时,不需要加载所有图片,只需要加载首屏显示图片即可,只有当用户下拉时才触发请求继续加载,这样做会提高网页打开的速度,不是所有用户都会下拉浏览网页全部内容,所以也节省了带宽。

    这款插件体积小,配置简单,对于需要展示大量图片的页面是非常有用的,延迟加载的内容不限于图片,还可以是视频或者iframe。

    需要注意的是,如果您的网站比较注重搜索引擎索引,那么二次加载会导致搜索引擎获取到的只是一个网页框架而没有实际内容,这样不利于SEO,虽然现在搜索引擎可以模拟客户端的Javascript脚本动作,但是对用户行为的模拟和实际有所差异。

  • Ubuntu 14.04.1 LTS git 升级

    由于之前Ubuntu 14.04.1 LTS使用的是git 1.9版本,这个版本的git对于修改文件名的操作不能识别为renamed,

    遂升级至2.14.2,升级步骤:

    sudo add-apt-repository ppa:git-core/ppa
    sudo apt-get update
    sudo apt-get install git

     

  • Vimsplain一款用来解释vim命令的工具

    通过vimgolf可以练习vim操作,vimgolf网站给出了一系列文本操作的练习实例,同时列出了用户的操作步骤,

    这个步骤是一长串vim命令,对于初学者来说往往看的眼花缭乱一头雾水,

    比如:

    qqf.xT,Pf%x+q7@qZZ

    pafcu的开源的这款Vimsplain正是为解决这个问题的,

    通过它可以拆分并解释上面的命令:


    安装和使用非常简单

    代码仓库 git@github.com:pafcu/Vimsplain.git

    使用

    python vimsplain.py commands 

    commands 为vim命令序列

  • vimgolf一个练习vim操作的高尔夫球场

    www.vimgolf.com 提供了一个练习vim的场所,

    通过安装vimgolf,拉取练习实例,

    将原始文件编辑为目标文件,

    然后上传发布自己的操作步骤,

    同时,也可以借鉴其他人的操作。

    在这里,vim 高手如云,各种奇葩技巧一定会让你大开眼界。

    使用 vimgolf 需要先安装Ruby和Gem,

    然后得有 twitter 账号,用来登陆 vimgolf,否则没有办法获取key。

    然后执行下面的命令,

    [challenge ID] 是网站首页列出得训练编号,

    随便选择一个训练项目,在页面右侧就可以看到 challenge ID

    # gem install vimgolf
    $ vimgolf setup
    $ vimgolf put [challenge ID]

    以下是challenge ID为 56fb2e75ccffcc0009026473 的练习过程:

    dj:%s/,/\r/g<CR>:g/^$/d<CR>ZZ

  • PHP使用SPL内置迭代器递归遍历目录

    PHP开发中经常有遍历目录的需求,

    使用PHP内置标准库SPL提供的迭代器,

    可以很方便地实现。

    代码:

    <?php
    $dir = './dir';
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
    foreach ( $files as $file ) {
        echo $file->__toString();
        echo chr(10);
    }

    参考:
    http://php.net/manual/en/spl.iterators.php

  • HTTP分析调试工具Fiddler的使用

    Fiddler是什么?

    Fiddler是一个Web调试代理程序,HTTP抓包分析工具,使用它可以分析您的电脑应用和互联网之间的基于HTTP协议的通信数据。通过Fiddler作为中间代理,就可以按需求查看、分析、修改所有的HTTP请求和响应内容。

    为什么在网络编程中需要用到Fiddler?

    日常网站开发中,经常会使用HTTP协议来传输数据,请求数据报文通常由头部参数和用户提交的正文部分按封装协议约定的格式,在TCP连接建立后,发送给远端的服务器,服务器处理完毕把头部信息和处理结果再封装为协议定义的响应格式返回给客户端,实际开发中可能由于两端业务逻辑的复杂性,组装完毕准备传输的最终内容,往往是未知的,此时如果借助Fiddler代理来捕获请求,就可以非常清晰地查看传输内容,同时,Fiddler可以修改发送和接收的数据,方便程序的调试开发。

    Fiddler系统代理示意图

    与Fiddler功能相似的工具还有哪些?

    目前常见的有Charles, Burp Suite, Wireshark, HTTPWatch , Tcpdump。

    Fiddler的安装

    对于操作系统Windows,Linux,MacOS,官方都有支持的版本可供下载。

    下载地址:

    https://www.telerik.com/download/fiddler

    Fiddler配置步骤

    1)Fiddler配置

    打开Fiddler,点击菜单栏Tools->Options…打开选项菜单,切换到Connections选项卡。

    在Fiddler listens on port:的文本框里面输入监听的端口号。

    然后访问 http://127.0.0.1:8883/, 如果想监听其它机器而非本机,选择Allow remote computers to connect为打开状态。

    如果正常打开并显示 Fiddler Echo Service 表明Fiddler监听已经正常工作了(打不开注意防火墙的限制)。

    2)安装Chrome扩展程序 Proxy SwitchyOmega

    安装这个Chrome浏览器的扩展程序,新建一个Fiddler端口的情景模式,就可以设定访问的页面通过Fiddler代理了。

    Chrome浏览器扩展SwitchyOmega添加Fiddler情景模式
    Chrome浏览器扩展SwitchyOmega添加Fiddler情景模式

    配置完成后,点击地址栏后面的SwitchOmeage的插件图标,选择Fiddler就可以了。

    3) 设定Fiddler捕获数据和过滤器

    Fiddler监听过滤设置
    Fiddler监听过滤设置

     

    如果打开的网页比较多,网络比较繁忙,抓取的HTTP会话会很多,设定过滤器可以只捕获特定的会话。

    上图中设定了只捕获www.baidu.com和*.one234.xyz两个域名的HTTP会话。

    如果Fiddler还是没有捕获,则需要注意左下角的设置,打开Capturing和All Processes。

    如果是Windows,需要注意防火墙的设置。

    4 ) 程序中设置Fiddler代理

    如果欲监听的HTTP请求是由程序发起,可以在代码中设置代理,例如

    PHP程序关键代码片段:

    curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);

    curl_setopt($ch, CURLOPT_PROXY, ‘127.0.0.1:8883’);

    Java程序关键代码片段:

    jre -DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888 MyApp

    shell curl 命令使用Fiddler代理:

    curl –proxy 192.168.199.117:8883 http://demo.one234.xyz/fiddler/fruit.html

    5 ) HTTPS解析

    依次打开Tools->options->HTTPS的选项卡,勾选相应的选项,如下图示例:

    6 ) 手机配置代理

    如果需要监听手机设备HTTP数据,在连接成功的Wi-Fi设置里面可以找到手动HTTP代理,设置代理主机名和端口:

    Android HTTP设置代理图示:

    iPhone HTTP代理设置图示:

    想正常解析HTTPS,还需要安装一个Fiddler的插件CertMaker,来生成证书。

    插件下载地址:https://telerik-fiddler.s3.amazonaws.com/fiddler/addons/fiddlercertmaker.exe

    安装完毕重新启动Fiddler,然后用手机访问http://127.0.0.1:8883,注意127.0.0.1切换为安装了Fiddler的主机的IP

    在页面点击FiddlerRoot Certificate下载证书后安装。

     查看HTTP会话

    配置成功后,就可以在Fiddler的界面看到抓取到的HTTP会话了,如下图:

    Fiddler抓取的HTTP会话列表
    Fiddler抓取的HTTP会话列表

     

    点击左侧每一条会话,就可以在右侧查看会话的所有信息,包括统计信息,会话请求和响应的数据报头和报体,使用的HTTP协议版本,Cookies等,以及使用表单,进制转化,JSON格式化等对数据报的解析查看。

    HTTP会话数据报分析
    HTTP会话数据报分析

    在这里我们可以看到程序发给服务器的原始数据,和服务器处理后返回的原始结果。这样的分析有助于排查问题来源于客户端还是服务端。

    自定义HTTP会话

    1)自定义HTTP请求[Request]

    自定义HTTP会话是指,可以通过Fiddler发起HTTP请求,下图是主动发起请求的例子:

    Fiddler自定义HTTP请求
    Fiddler自定义HTTP请求

    在这里,可以脱离浏览器主动发起HTTP请求,也可以把左侧的会话拖到右侧,然后在原来会话的基础上修改,(在左侧会话上点击右键,选择Replay->Reissue and Edit也可以编辑会话)这样就不依赖应用程序了。可以修改上次发起的请求数据,也就说可以完全绕开代码程序的限制,比如网页上的Javascript校验,复杂的表单构造,数据准备依赖,在实际程序开发测试中,可以忽略繁琐的请求数据构造,大大提高效率。

    2)自定义HTTP响应[Response]

    Fiddler自定义HTTP响应
    Fiddler自定义HTTP响应

    如上图所示,使用AtuoResponder可以自定义每一次会话请求的响应内容,这样,有些请求就不需要发送到远端服务器去处理,直接在本地,按预定的格式返回。比如远程服务器响应太慢,边界条件无法满足,线上生产环境无法返回满足特定条件的数据,需要权限认证等。自定义响应的内容可以指定为一个本地文件,或者设定的HTTP状态码等等。同样对于开发和测试人员,只要掌握使用技巧,可以避免很多因素导致的响应问题。

    想基于左侧的捕获的HTTP会话创建AutoResponder规则,先在左侧用Shift按键多选几条会话,拖动到右边即可。

    重放HTTP请求

    想重新请求某会话,只需要在会话上点击右键,选择Replay->Reissue Request即可。

    Fidder重新发送HTTP请求
    Fidder重新发送HTTP请求

    重放请求很方便,比如在联调时,客户端准备好数据后发起的请求,可以一直保持,不用再重建会话,因为实际开发中一次请求的数据构建可能依赖太多条件和步骤。

    备份和载入HTTP会话

    对于捕获的会话可以备份为文件,发送给其他开发测试人员,方便协助排查问题,也方便后续再次开发。

    实际项目开发中,各个开发人员往往因为沟通和对齐参数花费大量时间,只要把实际请求的数据发送给对方便一目了然知道问题所在。

    Fiddler打包会话
    Fiddler打包会话

    打包后是一个.saz文件,可以使用Fiddler直接打开。

    命令行工具 QuickExec

    ?sometext 按字符查找会话
    =status 按状态码选择过滤会话
    @host 按主机域名搜寻
    bpafter $path 设置中断
    g 取消所有中断
    select image/css/html 快速查找选择
    !listen 8889 监听新端口

    以上介绍了Fiddler对HTTP会话的各种操作,最主要的还是要看懂HTTP协议的数据报格式定义,数据报的body部分是业务互相传递的,对于熟悉业务的的编码人员比较了解,但是数据报的头部内容是独立于应用程序生成的,虽然编码人员本身不过多关注,但是出现问题了还是需要去分析的。Fiddler对HTTP会话的各种操作,让通信数据更加透明,通信过程更加可控,使软件开发调试以及测试更加便利,软件使用也很简单,是一款提高生产效率,简化开发过程不可多得的利器。

    参考文献:

    [1] https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

    [2] http://www.telerik.com/fiddler

    [3] http://docs.telerik.com/fiddler/configure-fiddler/tasks/configurefiddler