合作ができるようにPOTI-boardを改造しました

BBSNoteや、relmには、新規投稿ならパスワードがなくても続きを描く事ができる機能があります。合作の時に使う機能です。
もとの投稿を編集・削除する時はパスワードが必要なので、第三者による編集・削除を防ぐ事ができます。

POTI-boardでも似たような事ができるんだろうな…と思ったのですが…。

POTI-board 続きから描くPOTI-board 続きから描く
//コンティニュー時、削除キーを必要とする 必要:1 不要:0
define('CONTINUE_PASS', '0');
に設定すると、削除キーの入力欄が無くなり誰でも続きを描く事ができるようになりました。
しかし…。

POTI-board 続きから描くPOTI-board 続きから描く

差し換えなのにパスワードが無くても続きが描けるのはおかしい…と思ったら投稿エラーになりました。
これでエラーにならなかったら、知らないうちに投稿したイラストが別の何かになっていてもおかしくない…。

POTI-board 続きから描く

エラーになった画像が、アップロード途中の画像に残っていました。
コメントを入力すれば新規投稿になります。

という事は、削除キーがなくても続きを描く事ができる設定にすると、続きを描いて差し換える事ができなくなる仕様…という事になります。

投稿したあとでちょっとだけ直したくなった…という事があるので困ります。

差し換えと新規投稿で、異なる動作になるようにプログラムを書き変える事ができれば…。
//コンティニュー時のパスワード
// if(CONTINUE_PASS) usrchk($no,$pwd);
//パスワードが必要なのは差し換えの時だけ
if($type=='rep') usrchk($no,$pwd);
思ったより簡単だったというか…。差し換えの時はパスワードをチェックするけど、それ以外はパスワードをチェックしない。
新規投稿ならパスワードなしで、差し換えならパスワードが必要。
ここを書き直すだけで期待通りの動作をするようになりました。

ただし、削除キー不要の設定のところを、必要にしないと削除キーの入力欄が表示されなくなりますから、必要にしておかなければいけません。

config.phpで設定できるようにしてみました。
テンプレートの仕様変更も…。従来のテンプレートでも対応テンプレートで改造前のプログラムでもどちらでも問題がでないように何とか…。

config.php
//コンティニュー時、削除キーを必要とする 必要:1 不要:0
define('CONTINUE_PASS', '1');
の設定をそのまま使います。
説明文だけ変更して
//新規投稿でコンティニューする時にも削除キーが必要 必要:1 不要:0
define('CONTINUE_PASS', '0');
potiboard.phpの
1855行目付近
// if(CONTINUE_PASS) $dat['passflag'] = true;
//コンティニュー時はパスワード欄を常に表示
//従来のテンプレートとの互換性を保つため
//passflag を常に true にする。
$dat['passflag'] = true;
//ペイント画面のテンプレートで使う変数を追加
//新規投稿でパスワード不要の時 true
if(! CONTINUE_PASS) $dat['newpost_nopassword'] = true;
2680行目付近。
case 'contpaint':
//コンティニュー時のパスワード
// if(CONTINUE_PASS) usrchk($no,$pwd);
//パスワードが必要なのは差し換えの時だけ
if(CONTINUE_PASS||$type=='rep') usrchk($no,$pwd);
CONTINUE_PASSが 1 または、差し換えの時はパスワードが必要→差し換えでも、新規投稿でもパスワードが必要。

CONTINUE_PASSが 0 なら、パスワードが必要なのは差し換えの時だけになるので、新規投稿を選択すれば誰でもパスワード無しで続きを描く事ができる→合作可能。

お絵かき テンプレート
<!--{def newpost_nopassword}-->
<li>新規投稿なら削除キーがなくても続きを描く事ができます。</li>
<!--{/def}-->
<!--{ndef newpost_nopassword}-->
<li>続きを描くには描いたときの削除キーが必要です。</li>
<!--{/ndef}-->
従来のテンプレートを使う場合は
// passflag…削除キー入力を促す場合 true が入る
の箇所が、常に true となるので、
<li>続きを描くには描いたときの削除キーが必要です。</li>
という表示になる。

続きから描く時の挙動が、POTI-board、BBSNote、relmですべて同じになり設置しているすべてのお絵かき掲示板で合作が可能になりました。

P.S
この仕様はPOTI-board改 v1.42 lot.180507に組み込まれました。

コメントスパム対策のための.htaccess POTI-board用

長い間、掲示板へのコメントスパムをcgiの設定で防いで来ました。
「半角英数のみの投稿を許可しない」「NGワード機能を使用」「特定のIPをアクセスできないようにする」
BBSNotev8.0b19のモジュール、filter.cgi、ngword.cgi、security.cgiでフィルタリング。
それで十分…と思っていましたがBBSNoteはPerl5.12以上では動作しない事がわかり…。

他の掲示板には、BBSNoteのモジュールのような機能があるような、無いような…。
.htaccessによるアクセス制御 – さくらのサポート情報

特定のドメイン名やIPアドレスからの閲覧を【拒否】したい
設定ファイルの作成

メモ帳等のテキストエディタで、設定ファイルを作ります。

Order allow,deny
allow from all
deny from remote.host.com
deny from 192.168.0.
home/cgi/ のようなディレクトリ構成で、複数ある掲示板は cgi/ 以下にしか無いのであれば、cgiというディレクトリに.htaccessを設置すれば、cgi/ 以下の下位ディレクトリすべてへのアクセスを許可したり拒否したりできますから、掲示板が10種類あってもまとめて制御する事ができます。

こっちのほうが簡単…という事で.htaccessによる掲示板へのアクセス制限を使い始めて、約1年…。

コメントスパムのIPアドレス、ホスト名の記録を15年近く続けていましたから、それを.htaccessで拒否するように設定しました。
今のところコメントスパムを排除する事に成功しています。

しかし、拒否しなくてもいい人まで拒否してしまっている可能性も…。
登録しているIPアドレスが古すぎて、日本国内のIPアドレスになっていたら?
定期的に調べ直さなければならないのかもしれません。
それでも蓄積したブラックリストがあるのなら公開して欲しいという方のために、6800行あるファイルから必要最小限のものをピックアップしてzipファイルにまとめてみました。

POTI-boardと同じディレクトリに設置する事を想定したものですから、その他の掲示板にはそのままでは使えないかもしれません。

HTMLファイルをキャッシュさせないようにする設定と、POTI-boardの設定ファイルとログファイルへのアクセスを拒否する設定も入っているからです。

.htaccessの中を見て、何が書いてあるのかわかる方なら、IP、ホスト名だけコピペしていただければ…。
order allow,deny
allow from all

deny from .ru
deny from .ua
deny from .broadband.kyivstar.net
コメントスパムで埋まったお絵かき掲示板の投稿者のIP、ホストを調べてみた限りでは…。
.ua
.ru
.broadband.kyivstar.net
の3つを拒否するだけで海外からのコメントスパムの大半は拒否できるような気がします…。

配布するファイルにはもうちょっといろいろ入れてあります。

zipファイルには別の.htaccessも入れておきましたが…。
そのまま使うのは危険です。

何名かの国内の友人、そして全世界の友人を失っても構わない、とにかく海外からのコメントスパムを防ぎたい…という方のための設定になっています。
#phpファイルにアクセスできるのは.jpと.bbtec.netだけ
#そのほかの国内からのアクセスも弾いてしまうので
#実際に運用する場合は
#http://www.cgis.biz/tools/access/
#の日本国外からのアクセスを制限する.htaccessの内容を以下に追加

<Files ~ "\.php$">
order deny,allow
deny from all
allow from .jp
allow from .bbtec.net
</files>
海外からでも掲示板の投稿を読む事ができて、イラストを見る事もできるように、拡張子.phpのファイルへのアクセスだけ拒否するように設定してみました。
.jp
.bbtec.net
からのアクセスしか許可しない設定になりますから、学校の施設からアクセスしたら拒否されたとか…、国内で使っているけれど回線は米国の場合は書き込む事ができなくなります。
アクセス制限のかかっていない領域にメールフォームを設置して、書き込めないから許可する設定にしてください…という連絡をもらって許可するIP、ホストを追加していけばいいのかもしれませんが…。
IPアドレスで日本国外(海外/外国)からのアクセスを制限する.htaccess CGI's
ここから.htaccessをダウンロードして、そのまま設置すれば、国内からしかアクセスできなくなる筈なので、こんな小さな個人サイトのブログが配布しているファイルよりよほど確実かもしれません。

しかし、日本以外からのアクセスを禁止するという事はGoogleからのアクセスも禁止する事になるようなので、いつまでたってもGoogleの検索結果に反映されないといった問題が起きるかもしれません。

アクセス制限は、できるだけ狭い範囲にかけるものだと思っています…。
たとえば、ただのHTMLファイルへのアクセスはできるけれど、掲示板の拡張子、cgi、phpにアクセスできるのは日本国内からだけといった設定をする事もできます。
上位ディレクトリへの設置ではなく、掲示板が設置されているディレクトリに設置すれば、掲示板以外へのアクセスは制限されないのでトップページも見る事ができないといった問題を回避する事ができると思います。
htaccess_for_POTI_board_181425.zip
二種類の.htaccessが入っています。あくまでもサンプルです。
実際に運用する場合は、記述されている内容をご自身で確認してくださいますようお願い致します。
また、サーバによってはうまく動作しないかもしれません。
そういった事も含めて、あくまでもサンプルであり無保証です。

お絵かき掲示板のキャッシュを.htaccessで制御

お絵かき掲示板、POTI-boardは投稿後の画面をHTMLファイルで表示します。
そのため、更新される前のキャッシュを表示する事があります。
Ctrl+R、F5、またはブラウザの更新のアイコンをクリックすれば、投稿したコメントやイラストが表示されるので問題ないといえば問題ないのですが…。
ちょっと面倒…というか…。
どうにかならないのかな?と思って調べてみると…。
HTML5における no-cache - Qiita

本記事の投稿当時に紹介したアプリケーションキャッシュは、現在では廃止予定の機能となりました。
HTML5でもキャッシュを制御する方法が…と思ったら廃止…。その代わりになるものは?
サービスワーカーの使用 - Web API インターフェイス | MDN

コードは HTTPS を通して提供する必要があります。サービスワーカーはセキュリティ上の理由から HTTPS を通して実行されるよう制限されています。
どのようにすれば使う事ができるのか、よくわからない上、HTTPS…。
.htaccess の書き方(アクセス制御編) - Qiita

キャッシュの有効期限を過去にする
<Files ~ "\.html?$">
<IfModule mod_headers.c>
Header set Pragma no-cache
Header set Cache-Control no-cache
Header set Expires "Thu, 01 Dec 1994 16:00:00 GMT"
</IfModule>
</Files>
Qiitaの記事を参考に拡張子 .html または .htm のファイルのキャシュの有効期限を
Thu, 01 Dec 1994 16:00:00 GMT に設定。

POTI-board

デベロッパーツールでHTMLファイルのキャッシュの有効期限を確認。
Expires: Thu, 01 Dec 1994 16:00:00 GMT
リロードしなくても反映されるようになりました。
キャッシュしないファイルはHTMLだけで、ファイルサイズが大きな画像はキャッシュしますから表示速度への影響も最小限…だと思います。

relm

続きを描いた筈なのに以前の画像のまま…というトラブルが発生していたrelmのための設定。
<Files ~ "\.(html?|jpg|png)$">
<IfModule mod_headers.c>
Header set Pragma no-cache
Header set Cache-Control no-cache
Header set Expires "Thu, 01 Dec 1994 16:00:00 GMT"
</IfModule>
</Files>
pngファイルのキャッシュの有効期限は
Expires: Thu, 01 Dec 1994 16:00:00 GMT
リロードしなくても反映されるようになりました。

ただし、画像をキャッシュしない訳ですから、1ページに画像が10枚あって1枚あたり100kbとして1MB…。
回線が高速化しているのでで1MBなんて大した事ないんじゃないか…という気もしますが…。

relmのディレクトリに画像のキャッシュの有効期限を過去にした.htaccessを設置するだけなら、そのほかのページへの影響はありませんが上位ディレクトリに設置してしまうと…。
.htaccessを上位ディレクトリに設置すると下位ディレクトリでも設定が有効となり、下位ディレクトリに設置すると下位ディレクトリのみ有効になるようです。
.htaccess の書き方(アクセス制御編) - Qiita

見られたくないファイルへのアクセスを拒否
キャッシュから話しがそれますが…。
もっと早く知っていれば、あちこちいじりまわさなくても良かったのかも…という設定。
<files ~ "\.(ini|log|dat)$">order allow,deny
deny from all
</files>
.htaccessで文法を間違えると下位ディレクトリを含むすべての範囲でエラーが発生し、何も表示されなくなってしまいます。

テスト用のディレクトリに.htaccessを設置して問題ない事を確認してから設置が必要なディレクトリに設置するようにしていますが…。

なぜエラーになるのかわからなくて数十分というケースも…。

お絵かき掲示板はこちら。

POTI-boardのURL欄の文字列をチェックしてフィルタリングする

POTI-boardの
//拒絶する文字列
$badstring = array("foo","bar");
は、URL欄をチェックしていません。
URL欄の文字列をチェックして拒絶する設定項目を作る事もできますが…。
config.phpの設定項目が増えて、乱雑になるのはあまり好ましい事ではないのかもしれません。
しかし、お絵かき掲示板のURL欄に
.ru
と入力しているのはコメントスパム位なので、設定で弾く事ができたほうがいいような気もします。
設定項目を増やしたくない…だったら設定したい人は本体を改造して…。
POTI-board改とテンプレートシリーズ
から、php7と、PaintBBS NEOに対応したPOTI-boardをダウンロードし、potiboard.phpの860行目付近の
//本文へのURLの書き込みを禁止
if(DENY_COMMENTS_URL && preg_match('/:\/\/|\.co|\.ly|\.gl|\.net|\.org|\.cc|\.ru|\.su|\.ua|\.gd/i', $com)) error(MSG036,$dest);
の下に
//URL欄で拒絶する文字列
if(preg_match('/\.ru$|\.su$|\.ua$/i',$url)) error(MSG037,$dest);
を追加すると…。
.ru
.su
.ua
で終わるURLを拒絶します。
cheapautoinsurancefoo.pw
autoinsurancebar.pw
autoinsurancebaz.top

コメントスパムのURLの一部を変更したサンプルです。
autoinsurance.*\.(top|pw)$
で3パターンすべて拒絶。実際に使うとしたら
//URL欄で拒絶する文字列
if(preg_match('/\.ru$|\.su$|\.ua$|autoinsurance.*\.(top|pw)$/i',$url)) error(MSG037,$dest);
でしょうか。

POTI-boardで水素水を拒絶する

水素水のコメントスパムが連日投稿されている場合の考えられる設定。
//拒絶する文字列
$badstring = array("水( | ?)素( | ?)水","\[\/URL\]");
[/URL]も拒絶する設定に入っていますが…。

POTI-boardの拒絶する文字列には、正規表現を使う事ができます。

サルにもわかる正規表現入門

いつも参考にさせて頂いているサイト様。
正規表現全般については他のより詳しいサイトを参考にしていただくとして…。

水素水という文字列を拒絶したとします。
すると、コメントスパムを投稿する業者は、
水 素 水
水 素 水
水素 水
のように、全角スペース、半角スペースを入れて規制をすり抜けようとします。
正規表現が使えるので
水( | ?)素( | ?)水
全角スペースあるいは半角スペースあるいは半角スペースが無いかもしれないという指定になりました。
実際に試してみると、
水素水
水 素 水
水 素 水
水素 水
どのパターンでも拒絶する事ができました。
水素水の素の部分の一文字が変わる場合は?
水.水
でいい筈なのですが…。.の部分が半角英数であれば拒絶…しかし、全角1文字の場合はなぜか動作しません。
水.*水
にすると、今度は、水寿限無水、でも拒絶されて…。
弾きたくない長い文字列でも拒絶されてしまいました。
[/URL]
を拒絶したい場合は…。
POTI-boardの拒絶する文字列では、/ をエスケープする必要があります。
[ ] は正規表現のメタ文字ですから、[ ] そのものを指定したい場合はエスケープする必要があります。
\[\/URL\]
なぜ日本円の通貨の記号が…と思われるかもしれませんが、本来はバックスラッシュです。
POTI-board改

POTI-board改 v1.41.1 lot.180423 18/04/23 up
かなり無理を言って、
//指定文字列+本文へのURLの書き込みで拒絶(正規表現)
$badstring_and_url = array("ブランド","偽物","財布","\[\/URL\]");
という設定項目を作っていただきました。
デフォルトの設定で、本文にURLが記入されていて、かつ、ブランド、偽物、財布、[/URL]の文字列があると拒絶します。

しかし、知らなかったのですが、従来の拒絶する文字列でも結果的に同じになる書き方が…。
//拒絶する文字列
$badstring = array("HOGE","(:\/\/[\s\S]+(財布|偽物)|(財布|偽物)[\s\S]+:\/\/)");
この場合は、URL+拒絶する文字列の前後が入れ替わる事を想定して同じ文字列を二度指定しなければならなくなるので、面倒といえば面倒なのですが…。

正規表現に詳しい人なら、従来のままでも弾く事ができる内容だったようです。
でも、この書き方だとタイトルに偽物、本文にURLの場合は弾かれない…のかな。

お絵かき掲示板らくがき20枚

PaintBBS NEO お絵かき掲示板PaintBBS NEO お絵かき掲示板  女子陸上 ブルマPaintBBS NEO お絵かき掲示板 体操服 ブルマPaintBBS NEO お絵かき掲示板PaintBBS NEO お絵かき掲示板PaintBBS NEO お絵かき掲示板 女子陸上 ブルマPaintBBS NEO お絵かき掲示板 セーラームーンPaintBBS NEO お絵かき掲示板PaintBBS NEO お絵かき掲示板PaintBBS NEO お絵かき掲示板 ビキニPaintBBS NEO お絵かき掲示板 スク水PaintBBS NEO お絵かき掲示板 スク水PaintBBS NEO お絵かき掲示板 スク水PaintBBS NEO お絵かき掲示板 スク水PaintBBS NEO お絵かき掲示板 スク水PaintBBS NEO お絵かき掲示板 スク水PaintBBSNEO お絵かき掲示板PaintBBSNEO お絵かき掲示板 絶対可憐チルドレン 悠里PaintBBS NEO お絵かき掲示板 ふたりはプリキュア キュアブラックPaintBBS NEO お絵かき掲示板
HTML5のPaintBBS NEOのお絵かき掲示板で描いたらくがき20枚。
もしかしたらもしかして、ここイラストブログだったっけ?という。
絵をみるためのSNSがたくさんあるので、ブログに絵をのせてもそれだけでは誰も来ない時代になりましたね。

Painter2018 RIFファイルのサムネイル

ものすごく時間をかけて作業をした結果何とかなりましたが、何をどうやってどうすれば解決するのかわかっていません。
そういう意味では、この記事はあまり役にたたないかもしれません。

しかし、これはやらないほうがいいみたいだ…という事が何点かありましたので、備忘録として記事にまとめる事にしました。

Painter2018 RIFファイルのサムネイル

WindowsのエクスプローラーでPainterのRIFファイルのサムネイルを表示しているところ。

数日前、Painter9を起動したところWindowsにPainter9を適用していますという表示。
気がついたら…。

Painter2018 RIFファイルのサムネイル

Painter9のアイコンがサムネイルに…。
クリックするとPainter9が起動しました。

関連付けを変更されてしまったようです。
関連付けを変更するだけなら、エクスプローラー→ファイルを選択して、プロパティ→変更→ファイルを開くプログラムの選択で変更できますが、この方法で変更するとサムネイルが表示されなくなってしまいます。

Painter9と関連付けられているという事は…。
Painter9をアンインストールして、Painter2018もアンインストールして、2018を再インストールすれば解決するのでは?と思いました。

Painter2018 RIFファイルのサムネイル

Painter2018を再インストール。

Painter2018 RIFファイルのサムネイル

しかし、筆アイコンだけになりサムネイルが表示されません。

元の状態のほうがまだましなので、システムの復元でPainter9をアンインストールする前の状態に戻しました。

2018のアンインストールと再インストールをしなくても、コントロールパネル、プログラムから修復セットアップをすればいいのでは?と修復セットアップ。

Painter2018 RIFファイルのサムネイル

このインストーラー動作していないんじゃないか?と思いましたが…。

Painter2018 RIFファイルのサムネイル

修復するか削除するかを選択するメニューが出るまで30分ぐらいかかるみたいですね…。

2018を修復セットアップ、2018の筆アイコンとサムネイルが表示されるようになりました。

Painter9を起動した事が元で起きたトラブルなので、Painter9をアンイストールしました。
するとサムネイルが表示されなくなり…。
またシステムの復元…。

システムの復元でPainter9をアンイストールする前の状態まで戻すとサムネイルが表示されましたが、クリックしてもどのプログラムも起動しない…。

レジストリエディタを起動して、レジストリをエクスポートしてバックアップしてから、「.RIF」「PainterFile」のキーを削除。

2018を修復セットアップしてみましたが、サムネイルが表示されません。

バックアップしておいたレジストリをインポートして、2018を修復セットアップ。

この過程で何がどうなったのか、わかりませんが…。
サムネイルが表示され、2018と関連付けられた状態になりました。

Painter9は…。
アンインストールすると同じトラブルの繰り返しになる可能性…。

しかし、Painter9を起動した事によって発生したトラブルなので、スタートメニューのプログラムからPainter9のショートカットを削除して誤って起動しないようにしておきました。
Painter 2017 .rif thumbnail not showing in file explorer. - PainterFactory.com

I only see the icon for painter 2017 when looking at my files in Windows 10 file explorer. I went through the steps Skip explained for this problem with version 2016 but that did not help. The only thing that shows is the brush over the green simulated brushtroke.
Painter 2016: Thumbnails and file assocaitions with .rif files are not correct when installing Painter 2016 on a system with Painter2015

This is caused but a conflict collision in the Windows Registry for the RIF file type.
英語圏のソフトウェアなので、サポート、ユーザーコミュニティも英語…という事みたいですね。

日本語によるサポートを受ける事はできますが…あまりあてにしていないというか、メールで問い合わせても話がかみ合わない事が多いというか…。

RIF thumbnail のように、英文で検索したほうが解決の手がかりが見つかるのかも…。
posted by さとぴあ at 2018/04/04 16:57 | Painter