6

私のプロジェクトの 1 つで、私のユーザーは私の Web サイト ({username}.example.org) の専用部分を持つことになります。そのサブドメインでは、デザインを簡単に変更できるようにする予定です。TumblrPosterousShopifyなど、すでにそれを行っているオンライン Web サイトを調べてみました。

このアプリケーションの言語に関しては、Django で開始し、「デフォルトをフォールバックとして、URL 名に基づくテンプレート レンダリング」を実装することに成功しました(http://someuser.example.com は、templates/someuser/ にテンプレートを読み込みます)。 * または最初に見つからない場合は、templates/generic/* にあります)。しかし、PHP や Play!Framework が私のニーズにより適している場合は、それらにエクスポートできます。

使用されているテンプレート エンジンはJinja2です。これは、Django テンプレート エンジンと同じくらいシンプルで、習得が容易で、安全です (Python コードは実行できません (通常は実行する必要があります))。

私が見つけた各ソリューションの長所/短所は次のとおりです。それについてのあなたの考えと、あなたがどのようにするか、なぜそうするかを本当に感謝します. ありがとう。

注: ユーザーは、HTML/CSS について十分な知識を持っている必要があります。

変数の変更 (タイトルの色など)

  • 長所:

    1. シンプル&セキュア
  • 短所:

    1. 制限が多すぎるため、Web サイトをパーソナライズしたいユーザーは、このソリューションではそれを行うことができません

CSSのみアップロード

  • 長所:

    1. 統合が簡単
    2. 安全
  • 短所:

    1. 限定
    2. ユーザー画像はどこに保存されますか? (ロゴ、背景、グラデーションなど)

ユーザーがテンプレートを編集できるようにする (データベースに保存)

  • 長所:

    1. 変更はより重要です
    2. ユーザーは (ほとんど) 自由に自分のやりたいことを実行できます (GA、FeedBurner の実装など)。
  • 短所:

    1. 静的ファイル (ロゴ、背景画像、特殊効果 (グラデーション)) はどこに配置されますか?
    2. テンプレートはデータベースに保存され、表示されるページごとにもう 1 つの SQL 要求が必要です

ユーザーにテンプレートの編集を許可 (ファイルに保存)

  • 長所:

    1. 変更はより重要です
    2. ユーザーは (ほとんど) 自由に自分のやりたいことを実行できます (GA、FeedBurner の実装など)。
    3. FTP アクセスを有効にして、テンプレート ディレクトリでユーザーをルート化できます。
  • 短所:

    1. 静的ファイルの同じ問題

また、私が立ち往生しているのは、静的ファイル(画像、css、js)の処理方法についてです。データベースにこのURLに属するユーザーを確認するように要求するVirtualHostをApache(またはNGinx)で定義する方法がわかりません.

助けてくれてありがとう、ありがとう!

4

1 に答える 1

4

わかりました、私が行ったことと私の研究に基づいて自分自身に答えます。

Steve が述べたように、ユーザーがページ レイアウトをカスタマイズできるようにする場合は、細心の注意を払う必要があります。

リスクは十分に評価する必要があります。

私の場合、 PosterousTumblrのように、ユーザーが HTML/CSS/JS を完全に変更できるようにすることが可能です。

リスクは次のとおりです。

  • ユーザーは、他のユーザーの認証 Cookie を収集する JavaScript コードを追加できます。そうすることで、このユーザーは、他の各ユーザーの管理部分の任意のトークン認証にアクセスできます。簡単な解決策は、管理部分とユーザー Web サイト間のクロス Cookie を回避することです。
  • ユーザーは、Python、PHP、Java、Ruby などのテンプレート内のコードを実行しようとする可能性があります (使用目的に関して)。ここでの解決策は、コードの使用を完全に禁止し、タグのみを許可するテンプレート エンジンを使用することですPython 用のJinja2は、これに最適です。

この 2 つの条件が十分に評価されている場合は、[ユーザーにテンプレートの編集を許可する (データベースに保存されている)]オプションが適しています。

しかし、データベースのヒット数が多すぎることが心配な場合は、最後の解決策、別名「ユーザーにテンプレートの編集を許可する (ファイルに保存されている)」が可能です。

  • ユーザーがアクセスできるテンプレートディレクトリ以外のフォルダーにアクセスできないようにします。ユーザー アクセスにデータベースを使用する FTP サーバーをセットアップし (MySQL での ProFTPd など)、テンプレート ディレクトリでユーザーを chroot するなどの方法でそれを行うことができます。ユーザーがテンプレートディレクトリをストレージデバイスとして使用するのを避けるために、クォータを設定することも非常に重要です;)

さて、私は問題全体をカバーしたと思います。いくつかの点を見落としている可能性があります。その場合は、コメントまたは新しい投稿を追加してください。回答を完成させます。

于 2011-05-20T07:33:54.710 に答える