0

私は Lift を初めて使用するので、もっと詳しく調べて、Web 開発のメイン プラットフォームとして使用し始める必要があるかどうかを考えています。ただし、最初に払拭できれば幸いな「恐怖」はほとんどありません。

安全

フォームを生成する次のスニペットがあるとします。いくつかのフィールドがあり、ユーザーはそれらの一部だけを編集できます。

def form(in : NodeSeq): NodeSeq = {
  val data = Data.get(...)
  <lift:children>
    Element 1: { textIf(data.el1, data.el1(_), isEditable("el1")) }<br />
    Element 2: { textIf(data.el2, data.el2(_), isEditable("el2")) }<br />
    Element 3: { textIf(data.el3, data.el3(_), isEditable("el3")) }<br />
    { button("Save", () => data.save) }
  </lift:children>
}

def textIf(label: String, handler: String => Any, editable: Boolean): NodeSeq =
  if (editable) text(label, handler) else Text(label)

isEditableフィールドに割り当てられたメソッドが false と評価された場合でも、ユーザーがそのフィールドの値を変更できる脆弱性がないというのは正しいですか?

パフォーマンス

Lift でのフォーム処理の最適なアプローチは何ですか? 匿名関数をすべてのフィールドのハンドラーとして定義する方法が本当に気に入っていますが、どのようにスケーリングしますか? すべてのハンドラーに対して、関数がそのクロージャーと共にセッションに追加され、フォームがポストバックされるまでそこにとどまると思います。高負荷 (1 秒あたり 200 リクエストとしましょう) のサービスに関して、潜在的なパフォーマンスの問題が発生することはありませんか? また、これらのハンドラーはいつ解放されますか (フォームが再送信されず、ユーザーがブラウザーを閉じるか、別のページに移動した場合)?

ありがとうございました!

4

2 に答える 2

2

セキュリティに関しては、あなたは正しいです。入力が作成されると、ハンドラー関数が生成され、GUID識別子を使用してサーバー側に保存されます。この関数はセッション固有であり、コードによって閉じられます。そのため、他のユーザーがアクセスすることはできず、再生するのは困難です。あなたの例の場合、入力が表示されないため、関数は生成されません。したがって、がの場合、値を変更することはできませisEditablefalse

パフォーマンスに関しては、1台のマシンでLiftは非常に優れたパフォーマンスを発揮します。ただし、ハンドラー関数はマシン間で簡単にシリアル化されないため、水平方向にスケーリングするにはセッション対応の負荷分散が必要です。覚えておくべきことの1つは、Liftは非常に柔軟性があり、必要に応じてステートレスフォーム処理を作成することもできます(ただし、それほど安全ではありません)。私たちが作成してデプロイしたアプリケーションで、メモリが大量にヒットするのを見たことがありません。利用できるハード統計はあまり多くありませんが、このスレッドで、David Pollakdemo.liftweb.netは、当時、約100MBのRAM(500K /セッション)を消費する214のオープンセッションがあったと述べました。

また、ここにスケーラビリティに関するリフトブックの章へのリンクがあります。この章にはセキュリティに関する詳細情報もあります。

于 2013-01-30T13:52:01.243 に答える
1

クロージャーとすべてのものは、sessionShutdownで確実にクリーンアップされます。以前-わかりません。とにかく、それは実際には理論的な質問ではありません-それはユーザーが実際にWebフォームをどのように使用するかに大きく依存します。したがって、より広い答えについては、liftwebのメインチャネルで質問します-https ://groups.google.com/forum/#!forum / liftweb また、次の場合は「静的」フォームを使用できますをしたい。しかし、AFAIKには記憶に問題はなく、誰もがフォームへの主要なアプローチを使用しています。

ハンドラーxml/htmlを作成しない場合、ユーザーはデータを変更できません。確かにそうです。あなたのコードでは、私がそれを正しく理解していれば(私にはわかりませんが)、必要のないときに「text(label、handler)」を作成しないので、すべてが安全です。

于 2013-01-30T13:22:37.623 に答える