2017-01-05 3 views
0

以下のコードでは、htmlpurifierを使用してコンテンツ全体を通過させる方法を説明します。私はHTML文書全体を許可したいが、HTML、頭、スタイル、タイトル、本文、およびメタは取り除かれる。htmlpurifierを使ってhtml、head、title、bodyなどのドキュメント全体を渡す方法

私も$config->set('Core.ConvertDocumentToFragment', false)を試しましたが、うまくいきませんでした。

どこから始めるべきかについてのお手伝いがあれば幸いです。

ここで例を試しましたが、HTML Purifier - Change default allowed HTML tags configurationは動作しません。私はタグが許可されていない例外を取得し続けます。注:上記のすべてのタグをHTML.Allowedに追加しましたが、何も動作していないようです。それは、その使用目的・ケースですので、デフォルトで

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" /> 
    <title>Hello World - Email Template</title> 
    <style type="text/css"> 
    @import url(https://fonts.googleapis.com/css?family=Open+Sans:400,600); 
    body{-webkit-text-size-adjust: none;-ms-text-size-adjust: none;margin: 0;padding: 0;} 
    </style> 
    <body> 
    <h1>Hi there</h1> 
    </body> 
    </html> 

答えて

0

HTMLの清浄は、<body>コンテキスト内で有効なタグを知っています。基本的には、実際には<meta><html><head><title>というタグが何であるかは分かりません。その大部分のセキュリティはHTMLの意味的な基礎を理解することに依存しているため、大したことです! 、

...しかし、いくつか熟考した後ので、彼らは現在、非常に便利な答えを持っていない:

はこのトピックに関するいくつかのstackoverflowの古い質問があります私はあなたの質問はまだメリットがあると思うし、ここで答えるつもりです。

一般的に、これはHTML Purifierフォーラム(例:Allow HTML, HEAD, STYLE and BODY tags)で数回述べられていますが、一言で言えば、これは大量の作業をしなければ実行できないということです。残念ながら私は現在よく知りません単純なコピーと貼り付けでこの問題を解決するコードスニペットを使用してください。

あなたはHTML Purifierの勇気を掘り下げなければならないでしょう。

the instructions on the Customize! documentation pageを使用すると、HTML Purifierにほとんどのタグと関連する動作を教えることができます。あなたにとって最も興味深い部分は、一番下にあります。<form>はHTML Purifierに教えられています。いくつか後世のためにそこからの引用:

$config = HTMLPurifier_Config::createDefault(); 
$config->set('HTML.DefinitionID', 'enduser-customize.html tutorial'); 
$config->set('HTML.DefinitionRev', 1); 
$config->set('Cache.DefinitionImpl', null); // remove this later! 
$def = $config->getHTMLDefinition(true); 
$def->addAttribute('a', 'target', new HTMLPurifier_AttrDef_Enum(
    array('_blank','_self','_target','_top') 
)); 
$form = $def->addElement(
    'form', // name 
    'Block', // content set 
    'Flow', // allowed children 
    'Common', // attribute collection 
    array(// attributes 
    'action*' => 'URI', 
    'method' => 'Enum#get|post', 
    'name' => 'ID' 
) 
); 
$form->excludes = array('form' => true); 

の各パラメータは、私たちが尋ねた質問の1つに対応します。 アクション属性の末尾にアスタリスクを追加して、それが必要であることを示す になっていることに注目してください。誰かが 属性を持たないフォームを指定した場合、タグはaxedになります。また、末尾の余分な行は、 内にフォームがネストされないように特別な特別な宣言を行います。

あなたは(<html>までのすべての方法を)サポートしたい<body>タグの外にすべてのタグと同様のことを行う必要があります。

注:これらのタグをすべてHTML浄水器に追加しても、発見した設定Core.ConvertDocumentToFragmentfalseに設定する必要があります。

代替

、これはあまりにも多くの仕事のように見える、とあなたはあなたの文書のother ways to sanitiseヘッダ部とボディの属性を持っている場合は、スティックを慎重に、個別の作品をサニタイズ、粉々にあなたの文書をカットすることができますそれらは一緒に戻ってくる。

(もちろん、ドキュメント全体の代わりに使用してください)

関連する問題