web-dev-qa-db-ja.com

CMSでユーザーが入力したコンテンツを保護するには、どのような手順を実行する必要がありますか?

会社の防弾CMSを構築しているとします。コスト、時間、技術は問題ありません。開発者は、優れたコードを作成するための知識と経験を活用する準備ができています。

次に、古いCMSの質問に答える必要があります。ユーザーがCMSに入力したコードがサイトで受け入れられるようにするために、どのような手順を実行しますか?文字列を技術的にエスケープしてデータベースに入れるだけでなく、w3標準の考慮事項、不適切なコンテンツのフィルタリング、スペル、およびMicrosoft Wordコードスクラビングなどの難問があります。確かに、私が見逃した懸念があります...

3
bpeterson76

ここでの質問は:

「入力をばかげて簡単にすることで、ユーザーから欲しいものを正確に取得するにはどうすればよいですか」

ユーザーが実際に何らかの形式の入力でHTMLを直接使用する必要があるのを見る唯一の例は、表形式のデータをフォーマットする場合です。ただし、その場合、同じことを実行できるフォーム、またはさまざまなライブラリで使用可能な一般的なグリッドのいずれかを提供する方がはるかに簡単です。

少なくとも私にとっての黄金律は、HTMLではないマークアップのシステムを使用し、フォームハンドラーがそれを使用して、美しく標準に準拠した、意味的に正しいHTMLを構築できると思います。

サードパーティのスキャナーは、(通常)アップロードされたファイルに関するほとんどの問題を検出できます。私は個人的にClamAVが好きです。これは* nixとWindowsの両方で利用可能です。

これにより、すべてが適切に配置され、正しくフォーマットされ、望ましくないものが訪問者に提供されないという問題が解決されますか?

あなたがしなければならない他のことは、彼らが提出したコンテンツをレビューすることです。そのイメージは適切ですか?そのリンクはマルウェアや、リンクしたくない他の何かにつながりますか?等。

フラグメカニズムを提供することは役立ちますが、常に効果的ではありません。たとえば、stackoverflow.comで2年前の質問に回答すると、その質問はすぐにトップページにジャンプし、コミュニティは追加された内容を確認します。すべてのシステムがそのような保護を念頭に置いて設計されているわけではありません。

ユーザーが投稿したコンテンツに関してかなりの量を行っている場合は、不適切なメディア/リンクがすぐに除かれることを確認するために、提出物を単純に確認する請負業者を使用して検討する価値があります。または、ユーザーコミュニティ(存在する場合)からの協力を依頼して、通常のユーザーが享受できない何らかの特別な特権や追加の特典と引き換えに、同じことを行うことができます。

1
Tim Post

セーフガードを実装するために使用できるユーティリティ、ツール、プラグインのセットについて考え始めることができるので、これをより多くの「実装する必要のあるツール」に分割して答えます。

複雑な入力に対するTinyMCEなど、「Wordから貼り付け」機能を備えているため、Wordの文字に関する多くの問題を解消するのに理想的です。

「コードはcmsに入力されました」と言っているのに気づいたので、コンテンツではなく実際のコードを話していますか?私の意見では、それはアプリケーションの状況をかなり変えるでしょう。

それ以外の場合、私はjessegavinのコメントに同意します。この質問には多くの回答があります。私は認めなければならない、私はそれが立っているように質問を十分に理解していない。私自身開発者であるため、これらのセーフガードは、CMSを構築するときにとにかくコーディングするものです。

ユースケースの設計段階では、多くの安全対策をカバーできると思いますが。

0
David Yell

まあ、CMSを構築している場合(実際、CMSを作成した場合)、そのコンテンツを保存および取得できる限り、どのコンテンツが入力されたかは気にしません。コンテンツ管理システムの仕事は、使用状況によって異なるため、許容できるものと許容できないものを推測することではありません。

必要なことは、コンテンツがモデレートされていることを確認することです(つまり、ワークフロー承認プロセスを通過します)。これがコンテンツエディターを持っている理由です。コンテンツエディターの仕事は、入力されたコンテンツを確認し、公開するもの、拒否するもの、整理する必要があるものを決定することです。 WYSIWYGコンテンツをプログラムで整理するのは比較的簡単ですが、コンテンツが公開に適しているかどうかを人間が本当に判断するのに時間がかかります。

ユーザーにサイトにコンテンツを直接入力させないでください。常に確認してください。

0
Dan Diplo