EC-CUBE / ec-cube2

EC-CUBE official repository version 2
https://www.ec-cube.net
Other
86 stars 98 forks source link

ezyang/htmlpurifier の導入 #710

Open nanasess opened 1 year ago

nanasess commented 1 year ago

4系でも使用している ezyang/htmlpurifier の導入を検討する。 PHP5.6以降のサポートだが、コードを見るかぎりはPHP5.4以降で動作しそう。

nanasess commented 1 week ago

modifier.script_escape.php に htmlpurifier を適用することで対応できそう

nanasess commented 1 week ago

以下のようなパッチで、従来以外のパターンにも対応できそう

diff --git a/data/smarty_extends/modifier.script_escape.php b/data/smarty_extends/modifier.script_escape.php
index 99885cd382..3d14551bb1 100644
--- a/data/smarty_extends/modifier.script_escape.php
+++ b/data/smarty_extends/modifier.script_escape.php
@@ -1,4 +1,5 @@
 <?php
+require_once __DIR__ . '/../vendor/ezyang/htmlpurifier/library/HTMLPurifier.auto.php';
 /**
  * Scriptタグをエスケープする
  *
@@ -50,5 +51,10 @@ function smarty_modifier_script_escape($value)
         $value = preg_replace($pattern, $convert, $value);
     }

-    return $value;
+    // 念のために HTMLPurifier でサニタイズ
+    $config = HTMLPurifier_Config::createDefault();
+    $config->set('Cache.SerializerPath', __DIR__ . '/../cache');
+    $purify = new HTMLPurifier($config);
+
+    return $purify->purify($value ?? '');
 }