New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

plugin: eliminate use of DiaryContainer::find_by_* from recent_list #654

Closed
wants to merge 2 commits into
base: master
from

Conversation

Projects
None yet
2 participants
@metalefty
Copy link

metalefty commented Dec 14, 2017

It causes SecurityError. Use @diaries instead since now @diaries
can be accessed from plugin[1].

Ref [1]: http://kitaj.no-ip.com/tdiary/20021106.html#p03


修正前はこのようなエラーが出ていました。ざっと見ただけなので、細かいことはわかりませんがこれで動くようになりました。他のプラグインでも同様の箇所がありますが、私は使わないので触っていません。

  SecurityError

  Insecure operation - require

  (plugin/recent_list.rb):33:in `require'
  (plugin/recent_list.rb):33:in `block (3 levels) in recent_list'
  (plugin/recent_list.rb):32:in `reverse_each'
  (plugin/recent_list.rb):32:in `block (2 levels) in recent_list'
  (plugin/recent_list.rb):31:in `reverse_each'
  (plugin/recent_list.rb):31:in `block in recent_list'
  (plugin/recent_list.rb):30:in `catch'
  (plugin/recent_list.rb):30:in `recent_list'
  (TDiary::Plugin#eval_src):135:in `block in eval_src'
  /www/tdiary/lib/tdiary/plugin.rb:106:in `eval'
  /www/tdiary/lib/tdiary/plugin.rb:106:in `block in eval_src'
  /www/tdiary/lib/tdiary/core_ext.rb:120:in `block in safe'
  /www/tdiary/lib/tdiary/core_ext.rb:122:in `safe'
  /www/tdiary/lib/tdiary/plugin.rb:105:in `eval_src'
  /www/tdiary/lib/tdiary/base.rb:65:in `do_eval_rhtml'
  /www/tdiary/lib/tdiary/base.rb:29:in `eval_rhtml'
  /www/tdiary/lib/tdiary/view.rb:243:in `eval_rhtml'
  /www/tdiary/lib/tdiary/dispatcher/index_main.rb:37:in `run'
  /www/tdiary/lib/tdiary/dispatcher/index_main.rb:5:in `run'
  /www/tdiary/lib/tdiary/dispatcher.rb:25:in `dispatch_cgi'
  index.rb:33:in `<main>

metalefty added some commits Dec 14, 2017

plugin: eliminate use of DiaryContainer::find_by_* from recent_list
It causes SecurityError. Use @diaries instead since now @diaries
can be accessed from plugin[1].

Ref [1]: http://kitaj.no-ip.com/tdiary/20021106.html#p03
@tdtds

This comment has been minimized.

Copy link
Member

tdtds commented Dec 16, 2017

お使いの環境は、もしかしてFastCGIでしょうか? だとすると根は tdiary/tdiary-blogkit#17 と同じものですね。Rubyの実行環境によってこのエラーが出る場合があることが観測されているのですが、うまく直せずにいます。
今回のパッチではメモリ上に読み込み済みのデータしか対象にできないので、recent_listプラグインの本来の期待する挙動とは変わってしまうのが悩ましいところです。

@tdtds tdtds added the bug label Dec 16, 2017

@metalefty

This comment has been minimized.

Copy link

metalefty commented Dec 16, 2017

なるほど。ざっと見てあっさり直せたので、うまく行き過ぎて「こんな簡単に直せるのに直ってないのは何か深い事情があるかもしれない」とは疑ったのですが、挙動を変えてしまってたんですね。

残念ながらFastCGIではありません。典型的なApache2 + CGI + suEXECです。

ただ、環境はそのissueと似ていて、以下の環境です。

  • FreeBSD 11.1-RELEASE-p2
  • Apache 2.2.24
  • Ruby 2.3.5-p376
@metalefty

This comment has been minimized.

Copy link

metalefty commented Dec 16, 2017

Rubyバージョンが関係する案件ではないと思いますが、別件でRubyバージョンをアップデートする必要があり、tDiaryも新しいRubyで動いたのですが、変わらずでした。

  • Ruby 2.4.3-p205

最も簡単には、recent_listプラグインを呼び出している状態で1件以上の日記を書いて、CLIからindex.rbを実行することで再現しました。

$ ./index.rb                                      
(offline mode: enter name=value pairs on standard input)
(offline mode: enter name=value pairs on standard input)
Content-Type: text/html; charset=UTF-8; charset=UTF-8
Status: 200
Vary: User-Agent
Last-Modified: Tue, 28 Nov 2017 02:55:47 GMT
ETag: "078046538db07c19157931fd37e1e99d"
Content-Length: 1905
Pragma: no-cache
Cache-Control: no-cache

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
        <meta name="generator" content="5.0.6">
        <title>Plugin Error</title>
</head>
<body>
<h1>Plugin Error</h1>

<p style="font-size: large;"><strong>
        Errors in plugins?
        Retry to <a href="update.rb">Update</a> or <a href="update.rb?conf=default">Configure</a>.
</strong></p> 
<blockquote>
        <strong>SecurityError</strong><br>
        <pre>Insecure operation - require</pre>
        <pre>(plugin/recent_list.rb):33:in `require&#39;
(plugin/recent_list.rb):33:in `block (3 levels) in recent_list&#39;
(plugin/recent_list.rb):32:in `reverse_each&#39;
(plugin/recent_list.rb):32:in `block (2 levels) in recent_list&#39;
(plugin/recent_list.rb):31:in `reverse_each&#39;
@tdtds

This comment has been minimized.

Copy link
Member

tdtds commented Dec 27, 2017

おかげさまで再現方法がわかったので尻尾が捕まえられたと思います! #656 にて修正してみました。

@tdtds tdtds closed this in #656 Dec 28, 2017

tdtds added a commit that referenced this pull request Dec 28, 2017

@metalefty metalefty deleted the metalefty:insecure-recent_list branch Dec 29, 2017

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment