<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>bkbabydp (炜伯伯（David Z.）)</title>
    <link>https://ruby-china.org/bkbabydp</link>
    <description>Foolish and hungry. 若无必要，勿增实体。</description>
    <language>en-us</language>
    <item>
      <title>rails-parcel - 在 Rails 中集成 parcel 取代 webpacker</title>
      <description>&lt;p&gt;parcel 是一个极速零配置 Web 应用的打包工具，可以取代 webpacker。&lt;/p&gt;

&lt;p&gt;写了一个简单的 gem，用 parceljs 来代替 webpacker 集成在 rails。&lt;/p&gt;

&lt;p&gt;够用但不完善，暂时能满足我现在的项目需求。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;README&lt;/code&gt;摘要如下：&lt;/p&gt;
&lt;h2 id="rails-parcel"&gt;rails-parcel&lt;/h2&gt;
&lt;p&gt;Gem integrates parcel JS module bundler into your Rails application. It is inspired by gems webpacker.&lt;/p&gt;
&lt;h2 id="Installation"&gt;Installation&lt;/h2&gt;
&lt;p&gt;Add this line to your application's Gemfile:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gem 'rails-parcel'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And then execute:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ bundle install
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or install it yourself as:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ gem install rails-parcel
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then run&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ bin/rails g parcel:install
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Usage&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ bin/rake parcel:clobber
$ bin/rake parcel:watch
$ bin/rake parcel:serve
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;详情见：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://rubygems.org/gems/rails-parcel" rel="nofollow" target="_blank"&gt;https://rubygems.org/gems/rails-parcel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://github.com/bkbabydp/rails-parcel" rel="nofollow" target="_blank"&gt;http://github.com/bkbabydp/rails-parcel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;集成了&lt;code&gt;standard-version&lt;/code&gt;工具链作为&lt;code&gt;git commit&lt;/code&gt;规范要求。&lt;/p&gt;

&lt;p&gt;欢迎挑刺和建议。&lt;/p&gt;</description>
      <author>bkbabydp</author>
      <pubDate>Thu, 27 Feb 2020 10:50:36 +0800</pubDate>
      <link>https://ruby-china.org/topics/39542</link>
      <guid>https://ruby-china.org/topics/39542</guid>
    </item>
    <item>
      <title>关于 rucaptcha 库验证码显示空白的问题探究及解决</title>
      <description>&lt;p&gt;最近在使用验证码生成的库 &lt;a href="https://github.com/huacnlee/rucaptcha/" rel="nofollow" target="_blank" title=""&gt;huacnlee/rucaptcha&lt;/a&gt; 遇到一个问题：&lt;/p&gt;

&lt;p&gt;我的机子是 CentOS 7 的，访问验证码页面的，总是空白；查看日志，报错：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Started GET "/rucaptcha/" for ...
Processing by RuCaptcha::CaptchaController#index as HTML ...
  RuCaptcha   RuCaptcha convert: not authorized `-' @ error/constitute.c/ReadImage/454.
                        convert: no images defined `png:-' @ error/convert.c/ConvertImageCommand/3046.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;于是经过一番搜索，发现是 ImageMagick 的权限问题，请见社区相关帖子的评论部分：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ruby-china.org/topics/27832" title=""&gt;完美的 Ruby 图形验证码 Gem - RuCaptcha &lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“你的 ImageMagick 版本可能太老了，请确保 ImageMagick 版本在 6.9 以上”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;...&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“!--wtf？那我不是要换系统？？？不干！”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;于是死磕，终于解决。&lt;/p&gt;

&lt;p&gt;原来 rucaptcha 库生成图片的原理是直接用命令行调用 &lt;code&gt;convert&lt;/code&gt;指令（ImageMagick 库）：：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/huacnlee/rucaptcha/blob/master/lib/rucaptcha/captcha.rb#L71" rel="nofollow" target="_blank" title=""&gt;huacnlee/rucaptcha 源码&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;以上错误，就是在调用&lt;code&gt;label:- png:-&lt;/code&gt;的时候产生的。&lt;/p&gt;
&lt;h3 id="缘起policy.xml"&gt;缘起 policy.xml&lt;/h3&gt;
&lt;p&gt;在 &lt;code&gt;/etc/ImageMagick/&lt;/code&gt;（注：用&lt;code&gt;mac/brew&lt;/code&gt;安装的，则为 &lt;code&gt;/usr/local/etc/ImageMagick-6/&lt;/code&gt;）下，有一个叫做&lt;code&gt;policy.xml&lt;/code&gt;的配置文件，ImageMagick 用它来配置各种指令的权限，该文件默认禁用&lt;code&gt;label&lt;/code&gt; &lt;code&gt;png&lt;/code&gt; 等指令。&lt;/p&gt;

&lt;p&gt;原来在 ImageMagick 通过一个叫做 &lt;code&gt;delegates&lt;/code&gt; 的设计，来实现功能的兼容性和快速扩展，例如各种图片格式转换处理、网络访问等。&lt;code&gt;https&lt;/code&gt; &lt;code&gt;png&lt;/code&gt; 等指令都是通过该功能实现的。该功能的原理是：通过一个叫做 &lt;code&gt;delegates.xml&lt;/code&gt; 的配置文件，配置指令所对应的 &lt;code&gt;shell&lt;/code&gt; 语句，并传参执行。而该功能存在安全注入漏洞，攻击者可以通过构建恶意 shell 代码，利用 delegates 指令在解析上的疏忽，传递到&lt;code&gt;delegates.xml&lt;/code&gt;对应的 shell 语句执行，进行注入攻击：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://imagetragick.com/" rel="nofollow" target="_blank" title=""&gt;漏洞详情：ImageMagick Is On Fire — CVE-2016–3714 TL;DR&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;对此，官网的补救措施是使用 &lt;code&gt;policy.xml&lt;/code&gt; 文件来对执行的命令进行权限控制；同时在 7.0.1-9 到 6.9.4-7 版本中对 delegates 参数进行安全过滤：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.imagemagick.org/discourse-server/viewtopic.php?f=4&amp;amp;t=29588" rel="nofollow" target="_blank" title=""&gt;ImageMagick Security Issue —— from imagemagick.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;因此暂时的解决方案就是，把&lt;code&gt;policy.xml&lt;/code&gt;里相关语句进行注销：&lt;/p&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;...
&lt;span class="nt"&gt;&amp;lt;policy&lt;/span&gt; &lt;span class="na"&gt;domain=&lt;/span&gt;&lt;span class="s"&gt;"coder"&lt;/span&gt; &lt;span class="na"&gt;rights=&lt;/span&gt;&lt;span class="s"&gt;"none"&lt;/span&gt; &lt;span class="na"&gt;pattern=&lt;/span&gt;&lt;span class="s"&gt;"TEXT"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- &amp;lt;policy domain="coder" rights="none" pattern="LABEL" /&amp;gt; --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;policy&lt;/span&gt; &lt;span class="na"&gt;domain=&lt;/span&gt;&lt;span class="s"&gt;"path"&lt;/span&gt; &lt;span class="na"&gt;rights=&lt;/span&gt;&lt;span class="s"&gt;"none"&lt;/span&gt; &lt;span class="na"&gt;pattern=&lt;/span&gt;&lt;span class="s"&gt;"@*"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;修改完配置文件，重启服务，一切 ok 了。&lt;/p&gt;
&lt;h3 id="待探究的课题"&gt;待探究的课题&lt;/h3&gt;
&lt;p&gt;1、如何优化配置&lt;code&gt;ImageMagick&lt;/code&gt;才能在易用性或者安全性中寻找一个比较好的平衡——就是&lt;code&gt;rails&lt;/code&gt;提倡的最佳实践思想；&lt;/p&gt;

&lt;p&gt;2、建议在&lt;code&gt;rucaptcha&lt;/code&gt;库里去掉&lt;code&gt;label:-&lt;/code&gt;而用&lt;code&gt;-draw ...&lt;/code&gt;代替，暂未测试，理论上可行；&lt;/p&gt;

&lt;p&gt;3、此类问题通常比较少见并且解决耗时，如何在开发策略上进行设计，使得此类问题的风险和成本尽可能降低。&lt;/p&gt;

&lt;p&gt;第一次发帖，多多指教，欢迎探讨。&lt;/p&gt;
&lt;h3 id="补充"&gt;补充&lt;/h3&gt;
&lt;p&gt;该发完此贴，就发现&lt;code&gt;ruby-china&lt;/code&gt;针对优化配置&lt;code&gt;ImageMagick&lt;/code&gt;的问题有过一个相关探讨，参看如下：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ruby-china.org/topics/29909" title=""&gt;大量网站易受 ImageMagick 漏洞影响&lt;/a&gt;
&lt;a href="https://ruby-china.org/topics/30155" title=""&gt;ImageMagic 又爆可执行漏洞&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;看来社区功能在知识链接上的发力真的是可圈可点啊！&lt;/p&gt;</description>
      <author>bkbabydp</author>
      <pubDate>Thu, 08 Sep 2016 11:24:20 +0800</pubDate>
      <link>https://ruby-china.org/topics/31015</link>
      <guid>https://ruby-china.org/topics/31015</guid>
    </item>
  </channel>
</rss>
