2012-03-08 7 views
3

私のウェブページにMarkdown syntaxを使用する予定です。私はデータベースにユーザの入力をそのまま残しておき、いつものように、即座にプリントアウトしてhtmlspecialchars()でエスケープします。XSSの脆弱性から脱出し、Markdown構文を維持しますか?

echo markdown(htmlspecialchars($content));

を私はXSSの脆弱性から保護されていますし、値下げが動作することにすれば:

これは、それがどのように見えるかです。少なくとも、ちょっとした仕事。

問題は、ある(他のケースがあまりにもありますが、私は思う)、>構文を言うことができます。要するに

、あなたはこのような何かを引用する:エスケープと値下げに解析した後

> This is my quote.

を私はこれを取得:

> This is my quote.

当然のことながら、値下げパーサがありません>を「見積もり記号」と認識し、ではない作品! :(

私は、この問題に対する解決策を求めるためにここに来た一つの考えはしました:。。

まず、記法を解析し、 - その後HTML Purifierで「悪い部分を」削除

あなたはどう思いますかそれについて?それは実際に動作しませんか?

を私は誰かが同じような状況を持っていた、もう1つは、あまりにも私を助けることができると確信している。:)

答えて

4

はい、特定のウェブサイトは、まったく同じような状況があります。私はこれを書いている時点で、あなたはそのウェブサイト上で1664年の評判を持っている:)

スタックオーバーフローでは、我々はあなたが(私たちはその場でレンダリングされないことを除いて)説明し、正確に何をすべきか。ユーザーが入力したMarkdownソースはプレーンHTMLに変換され、結果はホワイトリストアプローチ(JavaScript version、C#バージョンpart 1part 2)を使用して消毒されます。

HTML清浄機は(それを使ったことがないた、私も詳細を話すことができない)かかると同じアプローチです。

+0

ありがとう! :) [This](http://stackoverflow.com/a/1226814/458610)また、私のためにかなり役立った! : – daGrevis

1

使用しているアプローチは安全ではありません。たとえば、次の例を考えてみましょう: "[clickme](javascript:alert%28%22xss%22%29)"一般に、Markdownプロセッサへの入力をエスケープしないでください。代わりに、安全モードでMarkdownを適切に使用するか、HTML Purifierまたは別のHTMLサニタイザをMarkdownプロセッサの出力に適用します。

私はしっかりとマークダウンを使用する方法についてelsewhereを書きました。安全に使用する方法の詳細については、リンクを参照してください。ただし、短いバージョンは:最新バージョンを使用してsafe_modeを設定し、enable_attributes=Falseに設定することが重要です。

+0

あなたが "enable_attributes = False"と "safe mode"について話しているのであれば、markdownの最新バージョン。PHPは1月からあり、私はそれらの設定を見つけることができません。それは私だけか、人々が何を話しているのですか?私はこの記事を数回、さまざまな投稿や最近のところで見つけました。 – Richard

+0

@リチャード、私の答えでリンクを読んでください。ここで、Markdownを安全に使用する方法とあなたの質問に答える方法の詳細を見つけるでしょう。 –

関連する問題