我试图在HTMLPurifier库的帮助下设置内部重定向。大多数文档都是非常直接的,为此目的的类URI.Munge已经存在,但是没有(在互联网上所有的)关于如何使它工作的例子。虽然,我不是一个高技能的程序员,但是关于如何设置它,甚至还有更多的示例这里,文档对我来说都没有意义。特别是在哪里设置%s、%r、%t等。和URI.MungeSecretKey。
包含外部链接的文本的提交由TinyMCE完成。在PHP代码中,我允许在配置中使用href,并添加了URI.Munge类:
$uri = $config->getURIDefinition(true);
$uri->addFilter(new HTMLPurifier_URIFilter_Munge(), $config);I guess here should be some additional code... 提交的代码:
<a href="http://example.com">Link</a>我得到了输出:
<a href="">Link</a>预期产出:
<a href="/redirect?s=http%3A%2F%2Fexample.com&t=c15354f3953dfec262c55b1403067e0d045a3059&r=&n=a&m=href&p=">Link</a>有人能给我一个如何实现这一目标的线索吗?或者至少有一些样本代码。
发布于 2019-07-30 22:00:54
页面http://htmlpurifier.org/live/configdoc/plain.html上提到的配置通常如下所示:
require_once '/path/to/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$config->set('URI.Munge', ...);
$purifier = new HTMLPurifier($config);
$clean_html = $purifier->purify($dirty_html);URI过滤器页用于当您想要编写您自己的自定义过滤器时,而不是当您想使用内置过滤器时!:)
你可能想要的是:
require_once '/path/to/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$config->set('URI.Munge', '/redirect?s=%s');
$purifier = new HTMLPurifier($config);
$clean_html = $purifier->purify($dirty_html);URI.MungeSecretKey在一定程度上防止了你的重定向端点被滥用为一个任意的重定向器(这很糟糕,因为恶意的人会将像https://good.example.com/redirect?s=https://evil.example.com这样的链接嵌入电子邮件中,所以表面上看,他们似乎是在链接到https://good.example.com,他们的链接得到了信任的提升--是的,这在某种程度上是有效的(不幸的是,这样的计划对某人来说,只有“某种程度”才能盈利)。
如果你提供,例如:
require_once '/path/to/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$config->set('URI.Munge', '/redirect?s=%s&t=%t');
$config->set('URI.MungeSecretKey', 'foobar');
$purifier = new HTMLPurifier($config);
$clean_html = $purifier->purify($dirty_html);然后将https://friendly.example.com转换为URL (为了便于阅读,我在URL中省略了urlencode() ):
/redirect?s=https://friendly.example.com&t=41934069b21c4a3892b61194b90fc537970106ebc9fe79961930a0888b22245f41934069b21c4a3892b61194b90fc537970106ebc9fe79961930a0888b22245f是hash_hmac("sha256", "https://friendly.example.com", "foobar")的结果。您的重定向端点可以通过计算hash_hmac("sha256", $_GET['s'], "foobar")并根据$_GET['t']检查它来检查这个值。如果这两个匹配,则由HTML净化器生成重定向。
就其本身而言,这并不是防止重定向滥用的完美保护措施,但它是有帮助的。
URI.MungeSecretKey的文档中描述了这些不足
请注意,攻击者仍有可能通过滥用您网站的预览功能等来获取安全散列,但此服务提供了额外的保护级别,应该与网站黑名单相结合。
这有用吗?
https://stackoverflow.com/questions/57258180
复制相似问题