问题描述
|
我有一些在本地编写的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配置设置,但找不到我需要的东西。有什么答案吗?
提前致谢
解决方法
简单的答案:不要在其上使用HTML Purifier。改用HTML Tidy之类的东西。
更复杂的答案:不要使用javascript:URL;相反,将类属性附加到您想要具有JavaScript的链接上,然后让JavaScript处理程序查找具有此类的链接,并将JavaScript代码作为onClick处理程序附加。
甚至更复杂的答案:创建一个新的javascript URI方案并对其进行编程,以仅接受属于您的函数的固定字符串。