サポート » 使い方全般 » 投稿画面のようなページで、誰でも投稿できるようにしたい

  • 誰でも記事を投稿できるサイトの構築を検討しています。
    そこで、どのような方法がよいのか、方法やアイデアを教えていただけますと嬉しいです。

    投稿の内容としては、本来のワードプレスの投稿画面のようなものを使って誰でも投稿できるようにしたいと考えています。
    (カテゴリーを選択できる、プレビューが使える、カスタムフィールドが編集できる、など)

    プラグインやコードなどを探しましたが、なかなか見つけることが出来なかったので、質問をしました。

    基本的に方法は問わないので、なにか方法がありましたら教えていただきたいです。

    ただし、直接管理画面へリンクする、というのはセキュリティなどを考えたときに、
    なるべく避けたいと考えています。

    よろしくお願いします。

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • モデレーター gatespace

    (@gatespace)

    私ならですが、
    上記の様な条件なら、「誰でも投稿できる」ユーザーが管理画面にアクセスしても余計なとこを触らせないようなの権限を与えますが。
    (たぶん、管理画面以外に投稿画面を設けることの方が面倒です)

    例えば、デフォルトの「投稿者」の場合、
    自分の投稿の公開・編集・削除とメディアのアップロードしかできません。

    日本語Codex:ユーザーの種類と権限

    トピック投稿者 iyaiya

    (@iyaiya)

    gatespaceさん

    ご回答ありがとうございます。

    私も、投稿者権限を与えて誰でもユーザー登録できるようにする
    という設定にしたのですが、
    そのような設定にすると、

    ・投稿画面や投稿一覧画面でwp-adminがurlに含まれる
     (詳しいことは覚えていませんが、なにかのサイトで、urlにwp-adminと表示されるのは
      セキュリティ面で考えて良くない、といったような内容の文章を見た記憶が
      ありましたので・・・)
    ・管理画面の投稿一覧画面で、他の人の投稿内容が表示されてしまう
    ・投稿一覧の下書きとゴミ箱の画面でも、同様に他人の文章が表示されてしまう
    ・投稿画面や投稿一覧画面に入ると、ブラウザのタブにwordpressと露骨に表示されてしまう
    ・根本的に不特定多数の人に管理画面に入られるのは、セキュリティなどのことを
     考えると危険
     (これも、詳しいことは覚えていないですが、以前にどこかのサイトで
      見た記憶があったので・・)

    といったような不安というか問題というか・・が発生しまして、
    この問題が不安材料だったので、
    権限を投稿者にした上で管理画面に安易に入らせるのはどうかと思い、
    質問をしてしまいました。

    逆を返せば、投稿画面と投稿一覧画面に関して、上記のような問題が解決、
    または上記のような問題は根本的に問題ではない、ということであれば
    私も、投稿者権限でユーザーを誰でも登録できる状態にしておきたいと考えています。

    抽象的な話になってしまって、非常に申し訳ないのですが、
    投稿画面の利用でも大丈夫という方法
    (もちろん、どの方法でも確実に安全な方法は無いというのは十分承知です)
    投稿画面以外での投稿の方法
    などが分かるようでしたら、引き続き教えていただきたいです。

    一方的なわがままのようになってしまって
    本当に申し訳ないとは思っているのですが、
    なんとかして解決したい問題だと思っていますので、
    よろしければ、ご教授いただければと思います。

    よろしくお願いします。

    こんにちは、

    投稿画面に似たフォームを作るのは以下のようにすれば、出来ます。

    ちゃんと記述しようとすると、nonceなどを追加したりする必要もでますが、
    基本は、こんな感じで出来ます。

    ポストをそのまま表示したりするので、あくまでサンプルです。
    このままでは使えないです。

    <?php
    /**
     * Template Name: every one
     *
     */
    ?>
    <?php get_header(  ); ?>
    <div id="yui-main">
    <div id="container">
    <?php
    echo "<h2>". esc_html( $_POST['my_title'] )."</h2>";
    echo "<div class=\"content\">".$_POST['my_extend_editor']."</div>";
    ?>
    <form action="" method="post">
    <?php
     $args= array(
                    'textarea_rows'=> 6,
                    'teeny'=> false,
                    'quicktags'=> true
                );
    ?>
    	 <h2>Extend Edit Field</h2>
    	<input type="text" name="my_title" id="my_title">
    <?php
        //$content= get_post_meta($post->ID,'_my_extend_editor',true);
    
        wp_editor( $content, 'my_extend_editor',$args );
    ?>
    <input type="submit" />
    </form>
    </div>
    <?php get_footer(  ); ?>

    あとは、どんなエレメントの入力を許し、どんな行為を許さないか決めて、
    なにに保存するか決めるという手順になると思いますが、きっちりやるのは簡単でないと思います。

    想定できない事は、たくさんあるはずなので、

    ページテンプレートなので、固定ページを作って、every oneテンプレートを選択してください

    トピック投稿者 iyaiya

    (@iyaiya)

    nobitaさん

    ご回答ありがとうございます。

    実際にコードを貼り付けてみました。
    かなり本格的に表示されたので正直驚きました。

    ですが、カテゴリーやタグの選択、プラグインによるカスタムフィールドの使用などを考えると、
    私の技術では、コードの変更を行って自分の希望のものに近づけることは難しく、
    将来的に使っていくことも難しいと思ってしまいました。

    そうなると、やはり管理画面のセキュリティの向上ということになるのでしょうか
    ただ、調べても管理画面のセキュリティについてよくわからないもので・・

    iyaiyaさん

    「WordPressを使って投稿画面のようなページで、誰でも投稿できるようにしたい」

    iyaiyaさんが、具体的になにをしたいのか、把握できていないので見当違いかもしれませんが、

    ワードプレスのこのフォーラムや、Codexをみていただくと解ると思いますが、Codexは、Media wiki フォーラムは、bbpress 等、必ずしも、すべてをWordPressでまかなっていないようです。

    不特定多数の人が自由に書き込みを行う場面では、コメント欄のように、厳しくhtmlを制限したり、Wikiなどでは、htmlを使わせずに、記法で対応するなどという事が行われています。

    不正な書き込みが行われた場合に、検知したり、元に戻したり、削除したりという機能をご自身で実装するという事は、とても大変な事だと思います。

    Wiki等のように、誰でも自由に書き込みが出来るという事を前提とした、プログラムなどを実際に使ってみたり、WordPressの機能と比較したりしながら、WordPressが最適かどうか、検討を進めていくといいのではないかと思います。

    脱線して、ごめんなさい

    モデレーター gatespace

    (@gatespace)

    自作の管理画面を用意するのは、セキュリティーの面を考えるとすごく大変、というのはnobitaさんのおっしゃるとおりです。
    個人的には、管理画面に対する懸念を払拭して、ダッシュボードを使った方が良いと思います。

    投稿画面や投稿一覧画面でwp-adminがurlに含まれる
    (詳しいことは覚えていませんが、なにかのサイトで、urlにwp-adminと表示されるのは
    セキュリティ面で考えて良くない、といったような内容の文章を見た記憶がありましたので・・・)

    まぁ、変えても(極論するとWordPressでなくても)アタッカーはやってきます。

    WordPressの管理画面に対するセキュリティについては、このフォーラムでも何度か議論されていますが、

    • 常に最新版を使う
    • 強力なパスワードを使う
    • 定期的なバックアップを確実に取る

    で十分という意見があり、その上でwp-login.php 及び wp-admin に対し二重認証(.htaccsessによるBasic認証が一番簡単。他にも方法はあります。)を行えば大丈夫、というのがここ最近の流れです。

    ・管理画面の投稿一覧画面で、他の人の投稿内容が表示されてしまう
    ・投稿一覧の下書きとゴミ箱の画面でも、同様に他人の文章が表示されてしまう
    ・投稿画面や投稿一覧画面に入ると、ブラウザのタブにwordpressと露骨に表示されてしまう

    デフォルトの「投稿者」でも他人の投稿は見えますが編集・削除する事はできません。
    見えてしまうことを気にしているのであれば、むしろダッシュボードをカスタマイズしてしてしまえばいいと思います。

    ・根本的に不特定多数の人に管理画面に入られるのは、セキュリティなどのことを
     考えると危険
     (これも、詳しいことは覚えていないですが、以前にどこかのサイトで
      見た記憶があったので・・)

    ここも権限を工夫し、触られたくないところは触らせない(WordPress側で拒否する)様にすれば良いだけです。
    それでも、ということであれば、先に書いた管理画面へのアクセスを2重認証やIPアドレスなどで制限すれば良いかと思います。

    自作の投稿管理画面を用意するなら、むしろ、今まで書いたことと+WordPressで標準で持っているセキュリティ対策と同程度の処理(プログラム)を行わなければならないので、非常に難しいと思います。

    それでも、不安、ということであれば、nobitaさんも書かれていますが、
    不特定多数の人が投稿できるフォーラム型に特化したWordPress以外のプログラムも検討してみてはどうでしょう。

    トピック投稿者 iyaiya

    (@iyaiya)

    nobitaさん
    gatespaceさん

    それぞれご回答ありがとうございます。
    同時の返信になってしまい、申し訳ありません。

    私が作りたいものとしましては、正確には違うのですが、
    小説投稿サイトのようなものを作りたいと考えています。

    そのため、
    ・ユーザーが自由に投稿できること
    ・投稿された内容がサイトに集まること
    ・投稿一覧画面と「下書き」、「ゴミ箱」の画面にそれぞれ自分の記事だけ表示される

    ということが必要になるかと思っています。
    (ウィキペディアのように、一つの記事を誰でも編集出来る、というよりかは
     自分の投稿したい記事をどんどんサイトにあげていく、という感じを想定しています。)

    私としては、以上のことを達成することを考えると、
    ワードプレスの使用が適しているかと思っているのですが、
    どうなのでしょうか?

    また、話がズレてしまうかもしれませんが、
    プラグインについては、
    buddypressとwp user frontendの使用を検討しました。
    しかし、自分自身が使い方を理解しきれていないという問題もあると思うのですが、
    なかなか思うようなものを作ることが出来ずに困ってしまいました。
    (buddypressの場合だと、各個人がブログを持つことが出来るようですが、
     記事をサイトに投稿してもらうのに、ブログを持つことが必要なのかが、
     よくわかりませんでした。)

    そして、gatespaceさんがおっしゃいますように、
    自作の管理画面はやはり難しいみたいなので、自分で用意することは
    今回はやめます。

    また、セキュリティに関しては、
    「ここ最近の流れ」を教えていただきましたが、
    その主流の動きに合わせてみようかと思います。
    (urlの根本的な変更はやはり難しいですね)

    そして、権限を利用して触られたくないところを触らせないようにする、
    ということはfunctions.phpやプラグインを使うことで対応するので、
    その点はなんとかなるかと思います。

    ただ、投稿一覧で他の人の記事が表示されてしまうことについて、
    ダッシュボードを使って対応するのがいいのではないか、
    ということでしたが、
    ダッシュボードでの具体的な対応の方法がいまいち把握できていなかったので、
    お手数で本当に申し訳ないのですが、
    もう少し詳しくお話していただけますとありがたいです。

    自身の投稿だけダッシュボードに表示する例

    function posts_for_current_author($query) {
     global $pagenow;
     if( 'edit.php' != $pagenow | | !$query->is_admin )
     return $query;
     if( !current_user_can( 'manage_options' ) ) {
     global $user_ID;
     $query->set('author', $user_ID );
     }
     return $query;
    }
    add_filter('pre_get_posts', 'posts_for_current_author');

    等が参考になるかもしれません。

    私が、「脱線」で指摘したかったことをもう少し具体的に書いてみます。

    メンバーシップを誰でも投稿できるに設定して
    新規ユーザーのデフォルト権限グループ、に投稿者を設定する

    ということを、やりたいと解釈していましたが その場合

    投稿者に付与される権限は、エディタだけではなく、ファイルアップロードや、カスタムフィールドの利用を含むのではないかと思います。

    エディタは、記述可能なエレメントを制限しますが、ファイルアップロードの機能は、htmlや、swfなどもデフォルトでは、可能になると考えています。

    また、phpをhtmlファイルで動作するような設定を何気なく行ってしまっている場合も少なからずあるのではないかと思います。

    アップロードされた、htmlやファイルへのリンクがエディタに挿入された場合、エディタは、通常のリンクとしてタグを生成します。

    アップロードされたhtmlファイルは、内容を特に制限されないと思いますので、悪意があれば、偽のログイン画面を表示して、リダイレクトするような仕組みを作ったりするかもしれません。

    カスタムフィールドも、大変便利な機能ですが、普通に内容をテンプレートに表示するような一般的な書き方をした場合

    <script>alert('test');</script>

    等が書けてしまうということもあるかもしれません。

    投稿者権限が、付与する機能は、制限された入力を許可するエディタだけではないのではないかと思います。

    また、セキュリティに関しては、
    「ここ最近の流れ」を教えていただきましたが、
    その主流の動きに合わせてみようかと思います。

    主流の流れが、ベーシック認証との二重認証だとは、私は考えていません。

    不特定多数のユーザーにどのような権限を付与するかは、自由だとは思いますが、「アタッカー」にもログインの自由を与えるという事と理解していたのですが、私のいつもの勘違いですか?

    質問の趣旨を間違えていたら、ごめんなさい

    トピック投稿者 iyaiya

    (@iyaiya)

    nobitaさん

    ご回答ありがとうございます。

    まず、自身の投稿だけダッシュボードに表示する例
    ということでコードを提示していただきまして、
    ありがとうございます。
    ただ、このコードをそのまま貼り付けたところ、
    エラーが発生してしまい、管理画面に入れなくなりました。
    詳しい理由などを調べていないのですが、他のコードとぶつかる可能性
    というのがあるのでしょうか。

    ちなみに、といっては失礼ですが、
    nobitaさんが作ってくださいましたコードを利用して、
    自身の下書きやゴミ箱だけをダッシュボードに表示する、
    ということも可能なのでしょうか。

    また、セキュリティについてですが、
    「メンバーシップを誰でも投稿できるに設定して
    新規ユーザーのデフォルト権限グループ、に投稿者を設定する」
    という解釈で大丈夫です。
    そのため、nobitaさんの指摘は
    納得すると同時に、やはり不安にもなりました。

    そして、
    「不特定多数のユーザーにどのような権限を付与するかは、自由だとは思いますが、「アタッカー」にもログインの自由を与えるという事と理解していた」
    ということですが、この点についても、おっしゃる通りです。

    ただし、現状はnobitaさんの指摘を解決出来ない状態で
    サイトの構築を続ける、ということになってしまうかもしれないのですが、
    セキュリティに関して、nobitaさんが指摘してくださいました点について、
    対応策などはあるのでしょうか。
    私自身調べても、具体的な解決策が見つかりませんでした・・・

    また、カスタムフィールドについては、
    advanced custom fieldsを使って、
    チェックボックスとしてのみ利用していく予定なのですが、
    そのような場合でも、カスタムフィールドにおいて、
    セキュリティ面においてやはり問題など発生するのでしょうか。

    長くなってしまい、申し訳ありません。
    また、なにかご教授いただけますとありがたいです。
    よろしくお願いします。

    ただ、このコードをそのまま貼り付けたところ、
    エラーが発生してしまい、管理画面に入れなくなりました。
    詳しい理由などを調べていないのですが、他のコードとぶつかる可能性
    というのがあるのでしょうか。

    念のため、Twentyelevenでコードを試しましたが、特に問題はありませんでした。

    このような場合は、デバッグモードを使って、発生しているエラーを調べて、書き込んでいただけないと、解決は難しいと思います。

    自身の下書きやゴミ箱だけをダッシュボードに表示する、
    ということも可能なのでしょうか。

    個別のリンクを消すという作業は、行った事がないので直ぐには、お返事できません

    また、カスタムフィールドについては、
    advanced custom fieldsを使って、
    チェックボックスとしてのみ利用していく予定

    質問時に含めていただくとよかったと思います。
    残念ですが、使用していないので なんとも言えません。

    具体的に作業してみて、問題が発生したら、質問してください。

    ただし、現状はnobitaさんの指摘を解決出来ない状態で
    サイトの構築を続ける、ということになってしまうかもしれないのですが、
    セキュリティに関して、nobitaさんが指摘してくださいました点について、
    対応策などはあるのでしょうか。
    私自身調べても、具体的な解決策が見つかりませんでした・・・

    私の指摘などは、そこにありそうな事を並べたてだけで、「そういうこともあるかも」と思っていただければいい程度のものです。
    これが出来たら、安全なんていうつもりはありません

    不安なものは、使わないという選択肢もありますよね

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • トピック「投稿画面のようなページで、誰でも投稿できるようにしたい」には新たに返信することはできません。