1

我有一些我在本地编写的 HTML,并希望通过 HTML 净化器运行它。它完全由我生成,所以我知道没有 XSS 漏洞。我正在尝试通过净化器运行它,但是无论我尝试什么,都会解析出 href='javascript:myFunc()' 。

我目前的设置是:

$string = file_get_contents($myHTMLFile);
$schemes = array (
    'http' => true,
    'https' => true,
    'mailto' => true,
    'ftp' => true,
    'nntp' => true,
    'news' => true,
    'javascript' => true,
);
$config = HTMLPurifier_Config::createDefault();
$config->set('URL.AllowedSchemes', array($schemes));
$purifier = new HTMLPurifier($config);
$string = $purifier->purify($string);

这根本不起作用 - 所有的 javascript 都被删除了。

我查看了所有各种 HTML Purifier 配置设置,但找不到我需要的。有答案吗?

提前致谢

4

1 回答 1

1

简单的回答:不要在上面使用 HTML Purifier。改用 HTML Tidy 之类的东西。

更复杂的答案:不要使用 javascript: URLs; 相反,将类属性附加到您希望拥有 JavaScript 的链接,然后让 JavaScript 处理程序查找具有此类的链接并将 JavaScript 代码附加为 onClick 处理程序。

更复杂的答案:创建一个新的 javascript URI 方案并将其编程为仅接受作为您的函数的固定字符串。

于 2011-04-13T23:09:33.663 回答